我正在使用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
如何修复代码段?
为了能够以交互方式输入任何内容,必须在interactive R会话中使用readline()
,但是您的Rnw文档是在非交互式R会话(why?)中编译的-这是只是我的猜测,因为您没有提到如何编译文档,并且大多数人可能单击RStudio中的“编织”按钮,这意味着文档是在单独的非交互式R会话中编译的。
在非交互式R会话中,readline()
不允许交互式输入,并立即返回""
,这会导致您看到错误:
> 1:""
Error in 1:"" : NA/NaN argument
[如果您有任何需要人工交互的代码(例如输入数字),则必须在交互式R会话中编译文档,而执行此操作的方法是在R控制台中运行knitr::knit('your-document.Rnw')
。
就是说,我不建议将需要交互的代码放在knitr文档中,因为它会使再现变得更加困难(结果取决于交互输入,这是无法预测的。)]
您可以定义您的功能,因此它绝对不需要人工干预,例如,
sum2 <- function(n = as.numeric(readline("Enter any positive integer"))) { i <- 1:n; s <- sum(i) return(s) }
然后,如果要在非交互式R会话中调用该函数,则可以将值传递给参数
n
,例如,
sum2(10)