运行Latex文档中R中定义的函数

问题描述 投票:1回答:1

我正在使用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

如何修复代码段?

r function latex knitr
1个回答
1
投票

为了能够以交互方式输入任何内容,必须在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)
© www.soinside.com 2019 - 2024. All rights reserved.