Чтобы иметь возможность вводить что-либо в интерактивном режиме, 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)