编织我的.Rmd
文件窒息并给我一个错误。我的.Rprofile
中有一些我需要经常启动的东西,而第一个似乎导致问题的是将常用变量转换为类型的那个。这是完整的错误消息:
e $ e_pop_num< - as.numeric(e $ e_pop_num)中的错误: 无法在基本命名空间中执行复杂的分配 执行暂停
knitr终止,状态为1
如果我在.Rprofile
中注释掉所有这些操作或将它们包装成一个函数(我也无法工作),那么编织工作正常。
我并不假装完全理解名称空间或环境,但我知道这就是问题所在。所以:
.Rprofile
。在这种情况下,我的问题是,在哪里放置这种“每次使用”代码的最佳位置?或者Rstudio
或我的.Rmd
脚本,以便它可以评估我的.Rprofile
而不会卡住?会话信息: R版本2.15.3(2013-03-01) 平台:i386-w64-mingw32 / i386(32位)
Rstudio版本0.98.490
这是我的.Rprofile的内容被简化以使其可重现。
e <- data.frame(x=1:5, e_pop_num=6:10)
# set e_pop_num to numeric to avoid integer overflow error
e$e_pop_num <- as.numeric(e$e_pop_num)
答案 0 :(得分:1)
将您的作业包装在if块中。
if(interactive()){
#assignments
}
从简单阅读?如果您不在交互式会话中,则启动。在基础环境中执行RProfile,而在交互式会话中则分配到用户全局环境。 Knitr在使用RStudio时会在运行时启动一个新的非交互式R进程,这就是为什么你得到我怀疑的错误。
答案 1 :(得分:1)
我自己也遇到了类似的问题。但是,我只遇到Rprofile.site
而不是.Rprofile
的问题。
我找到了一种解决方法,方法是创建一个隐藏环境,使用local
向其分配对象,然后将其附加。
# Create hidden environment
.env = new.env()
# Assign object in hidden environment
local({
e <- data.frame(x = 1:5, e_pop_num = 6:10)
e$e_pop_num <- as.numeric(e$e_pop_num)
}, envir = .env)
# Attach hidden environment
attach(.env)
作为.Rprofile
而不是Rprofile.site
,以下对我也有效:
# Create hidden environment
.env = new.env()
# Assign object in hidden environment
.env$e <- data.frame(x = 1:5, e_pop_num = 6:10)
.env$e$e_pop_num <- as.numeric(.env$e$e_pop_num)
# Attach hidden environment
attach(.env)