- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现 knitr 文档从用户环境继承变量,即使参数 envir = new.env()
提供。如何防止它继承这些变量?
例如,假设我使用一个不存在的变量 ( y
) 编写了一个简单的 .Rmd 文件,将其编织并显示结果文件:
library(knitr)
writeLines(c("```{r}", "y + 1", "```"), "test.Rmd")
knit("test.Rmd", quiet = TRUE, envir = new.env())
# [1] "test.md"
cat(readLines("test.md"), sep = "\n")
#
# ```r
# y + 1
# #> Error in eval(expr, envir, enclos): object 'y' not found
# ```
y
变量不存在,就像我应该的那样。
y
在我自己的环境中,我发现我现在可以引用
y
在 .Rmd 文件中,即使我给出了
envir = new.env()
争论。
y <- 3
knit("test.Rmd", quiet = TRUE, envir = new.env())
# [1] "test.md"
cat(readLines("test.md"), sep = "\n")
#
# ```r
# y + 1
# # [1] 4
# ```
envir = new.env()
应该导致在没有
y
的新环境中评估 knitr 文档多变的。这是一个问题,因为它允许 knitr 文档不可复制,指的是我没有在文档中定义的变量。
render
documentation (这是
knit
的包装)特别说你可以使用
envir = new.env()
:
The environment in which the code chunks are to be evaluated during knitting (can use new.env() to guarantee an empty new environment).
render
出于相同的原因,显示与上述相同的行为。我对
envir = new.env()
的期望(和 rmarkdown 文档)是否不正确? ,还是我使用不当?还有另一种方法可以保证正在编织的文档中的新环境吗?
最佳答案
new.env
has a parent
argument其默认值为 parent.frame()
— 即调用者。换句话说,您的新环境继承了您当前环境的所有内容。
您可以通过指定 parent
来避免这种情况。 :
new.env(parent = baseenv())
或者,如果您想继承加载的包:
new.env(parent = as.environment(2))
而且,是的,
render
文档有点误导:而
new.env()
提供了一个新的、空的环境,它并没有完全与调用者解耦,而且调用者可能几乎不想只使用
new.env()
.
baseenv()
继承的干净环境中使用包,你需要手动实现包附件机制,因为R包本身不支持环境隔离(grrr!)。或者您使用
‘box’ package ,它支持本地附加包:
```{r}
box::use(ggplot2[...])
qplot(rnorm(10))
```
[...]
声明导致包被附加到本地(在当前范围内),与
library
不同.
关于r - knitr 从用户的环境中继承变量,即使是 envir = new.env(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32257970/
我在使用R中的包加载数据时遇到了这个错误,在这个包中,使用了pakcage rJava。 每次运行一个函数,报错是 Error in ls(envir = envir, all.names = pri
当我尝试使用“XLConnect”包将 Excel 文件读入 R 时,以下错误不断出现,不一致。 Error in ls(envir = envir, all.names = private) : i
我是 R 新手,所以如果问题有点愚蠢请原谅我。我正在尝试为值函数迭代编写一个简单的 while 循环。我的函数(optim.routine)使用求解器 ipoptr。这是我的代码: di.eps &
从命令行或脚本使用 jags.parallel 效果很好。我可以从 http://www.inside-r.org/packages/cran/R2jags/docs/jags 运行这个修改后的示例就
我尝试使用 predict() 函数通过将变量传递到模型中来预测 R 中的值。 我收到以下错误: Error in eval(predvars, data, env) : numeric 'env
为环境中的名称赋值和设置变量的环境有什么区别?我无法从文档中弄清楚。 例如: MyTestFunc = function(x) { myVal = "abcde" # what is
我想要一个带有数据名(dat)、因子(myfactor)、变量名(myvar)等参数的函数来动态生成直方图(必须使用lattice)。 使用 IRIS 作为最小示例: data(iris) my_hi
我正在编写一个 R 包,其中有这样一个 Rmd 模板: child.Rmd: ```{r} print(x) ``` 还有这样一个函数: child = v1.6.3): knit_child() 获
编辑以提供完整的代码示例和特定问题 我正在编写一个函数来生成股票价格的时间序列图。但是,出现以下错误 eval(expr,envir,enclos)中的错误:找不到对象'df1234' 这是该函数的示
我发现 knitr 文档从用户环境继承变量,即使参数 envir = new.env()提供。如何防止它继承这些变量? 例如,假设我使用一个不存在的变量 ( y ) 编写了一个简单的 .Rmd 文件,
我不明白这里出了什么问题。 data.train <- read.table("Assign2.WineComplete.csv",sep=",",header=T) # Building decis
我是 R 及其包系统的新手,刚刚编写了我的第一个包,目的是将它与 OpenCPU 一起使用。 执行这个函数时: #' Create a PNG which shows interpolated sen
我不明白这里出了什么问题。 data.train 。您需要更改公式或数据框,使它们彼此一致。 澄清一下:Pre 是一个包含公式的对象。该公式包含对变量 pre 的引用。后者必须与数据框一致。 关于r
我正在解决 Kaggle 数字识别器问题。当我尝试给定的代码时,出现错误。 eval(expr,envir,enclos)中的错误:找不到函数“eval” library(ggplot2) libra
当我尝试“编织 HTML”或使用 LyX 生成 pdf 时,我遇到了环境问题。当我直接运行 R 代码(或用 Rstudio 编译 HTML 笔记本)时,没问题。我已经用 knitr@1.3.7(开发版
我尝试将geom_ribbon对象添加到我的ggplot2图中。在我的数据框中,我有NA值(我想)可能会引起问题。这是我拥有的数据帧的可复制示例: base <- c(1:10, rep(NA, 10
我基于 kind help 在 R 中创建了一个函数来自@Jim M。 当我运行该函数时,出现错误:错误:未知列“原始数据” 查看调试器时,我收到消息: Rcpp::eval(expr, envir,
我在使用一个简单的 ggplot 命令时遇到了一个意外错误,我已经用尽了所有的网络搜索来找到类似的问题。 qplot(hp,mpg,data=mtcars) Error in list2env(mem
我不确定这是否应该发布到 R-devel (如果是这样,请告诉我...)但 R 的 eval() 的文档中似乎至少有一个错误。函数,这对于 R 的非标准评估特性是必不可少的,或者我做错了什么? > e
我不明白为什么我的极简封装函数会产生主题错误。下面应该重现它。我的目标是根据单个数据框中的数据绘制一堆图,每个图都位于一个新窗口中。 library(ggplot2) library(datasets
我是一名优秀的程序员,十分优秀!