Запустите функцию, определенную в R внутри документа Latex - PullRequest
1 голос
/ 10 апреля 2020

Я использую пакет Knitr для написания отчета в латексе. Я написал в своем фрагменте следующую функцию:

sum <- function(){
  n <- as.numeric(readline("Enter any positive integer"))
  i <- 1:n; s <- sum(i)
  return(s)
}

Когда я выполняю ее в документе Latex как:

<<>>
sum()
@

Я получаю эту ошибку:

## Enter any positive integer ## 
Error in 1:n: NA/NaN argument

Как мне исправить фрагмент?

1 Ответ

1 голос
/ 10 апреля 2020

Чтобы иметь возможность вводить что-либо в интерактивном режиме, readline() необходимо использовать в интерактивном R-сеансе, но ваш документ Rnw скомпилирован в неинтерактивном R-сеансе ( почему? ) --- это только мое предположение, так как вы не упомянули, как вы скомпилировали документ, и большинство людей, вероятно, нажимают кнопку "Вязать" в RStudio, что означает, что документ скомпилирован в отдельном неинтерактивном R сеанс.

В неинтерактивном сеансе R readline() не разрешает интерактивный ввод и немедленно возвращает "", что приводит к появившейся ошибке:

> 1:""
Error in 1:"" : NA/NaN argument

Если у вас есть какой-либо код, который требует взаимодействия с человеком (например, ввод чисел), документ должен быть скомпилирован в интерактивном сеансе R, и способ сделать это - запустить knitr::knit('your-document.Rnw') в консоли R.

* 1015 Тем не менее, я не рекомендую помещать код, который требует взаимодействия, в документ knitr , потому что это затруднит воспроизводимость (результат зависит от интерактивного ввода, который равен не предсказуемо).

Вы можете определить свою функцию так, чтобы она абсолютно не требовала человеческого взаимодействия, например,

sum2 <- function(n = as.numeric(readline("Enter any positive integer"))) {
  i <- 1:n; s <- sum(i)
  return(s)
}

Затем, если вы хотите вызвать функцию в неинтерактивном R сеанс, вы можете передать значение в аргумент n, например,

sum2(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...