在尝试编织时出现错误“无法在基本命名空间中执行复杂的分配”

时间:2013-12-26 08:50:31

标签: r knitr rstudio

编织我的.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)

2 个答案:

答案 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)