rmarkdown::渲染时提示错误;“编织到html”;按钮运行

rmarkdown::渲染时提示错误;“编织到html”;按钮运行,r,r-markdown,R,R Markdown,我使用“Knit to HTML”按钮和rmarkdown::render()得到了不同的输出,我发现这和环境有关。我想知道环境到底有什么不同,这样我才能完全理解发生了什么。以下是我的观察: var1 <- "" var1 <<- some code that creates a new value 在所有情况下,后续函数都会获取新的var值和功 请注意,使用第一个设置(仅保存到全局)的前一个块在rmarkdown::render()中未出现错误那么,在环境方面,运行代

我使用“Knit to HTML”按钮和rmarkdown::render()得到了不同的输出,我发现这和环境有关。我想知道环境到底有什么不同,这样我才能完全理解发生了什么。以下是我的观察:

var1 <- "" 
var1 <<- some code that creates a new value
  • 在所有情况下,后续函数都会获取新的var值和功
请注意,使用第一个设置(仅保存到全局)的前一个块在rmarkdown::render()中未出现错误那么,在环境方面,运行代码的三种方式有什么不同呢

稍后添加: 我后来发现,将嵌套函数的参数放在列表中,并使用do.call调用该函数在rmarkdown::render()中工作,而不使用全局变量。下面我举一个简单的例子为什么do.call在渲染调用中起作用?

os1 <- function(OSdf, strata_name) {
  form <- as.formula(paste("Surv(tte, status) ~", strata_name))
  KMfit <- do.call(survfit, args = list(formula = form, data = OSdf, conf.type = "log-log"))
}

os1彭彭彭,我知道这是一个老问题(也没有答案),但我的想法是。我的观点是,但从来没有一个rmarkdown文档依赖于全局环境中的变量。将文档视为一个
函数
,其中函数参数作为参数提供给文档。就像一个好的无副作用的函数一样,在Rmd中,要么从
params$
获取数据,要么创建一个变量,否则就是一个错误。(这包括
库(…)
,如有必要)顺便说一句:我认为命名变量
var
是个坏主意,因为它与
stats
中的函数同名。虽然R通常是正确的(当您尝试
var(1:3)
时,会引用
stats::var
),但它并不总是正确的。尝试
var感谢@r2evans的回复。我知道在这种情况下使用全局变量是不好的。这就是为什么我想了解潜在的原因。我确实发现,使用do.call并将嵌套函数的参数放入列表可以解决问题,而无需使用全局变量。我在上面发了帖子,希望有人能解释一下为什么这会带来不同。是的,“var”只是一个虚构的例子。我现在更新了。再次感谢。
os1 <- function(OSdf, strata_name) {
  form <- as.formula(paste("Surv(tte, status) ~", strata_name))
  KMfit <- do.call(survfit, args = list(formula = form, data = OSdf, conf.type = "log-log"))
}