我正在尝试使用该功能insertSource(R 2.12中的新功能)来更新我所做的更改的功能.
但是,当我以这种方式使用该功能时:
insertSource('filename.R', package = 'mypackage')
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error in get(this, envir = envp) : object '.cacheOnAssign' not found
Run Code Online (Sandbox Code Playgroud)
不幸的是我无法想出一个简单的可重复的例子 - 如果有人会有所帮助,请建议我如何做 - 但我发现以下代码确实有效:
system("echo 'nls <- function(nls) return(nls)' > foo.R")
insertSource('foo.R', package = stats)
Run Code Online (Sandbox Code Playgroud)
stats包和mypackage之间的一个区别是库位置(mypackage位于'〜/ lib/R /'.(更新):当.libPaths('~/lib/R')进入时仍然出现错误.Rprofile,而googleing'.cacheOnAssign'只返回6次点击,其中两次对这个问题.
insertSource?运用 options(error = recover)
options(error = recover)
Error in get(this, envir = envp) : object '.cacheOnAssign' not found
Called from: get(this, envir = envp)
Browse[1]> where
where 1: get(this, envir = envp)
where 2: insertSource("filename.R", "mypackage")
Browse[1]> ls()
[1] "q"
Browse[1]> n
>
Run Code Online (Sandbox Code Playgroud)
不确定这些结果是什么,以及从何处开始
使用options(error = browser)提供了我放在文本文件中的更多信息
这可以说是一个错误insertSource().当您提供文件而不是环境时,它会调用evalSource()在源环境中合成.cacheOnAssign变量(将简单地FALSE)的文件.这会阻止替换,因为变量不一定存在于包命名空间中.
有几种方法可以解决这个问题,最简单的方法是自己创建环境并删除.cacheOnAssign此修复程序:
insertSource <- function(source, package="", ...) {
if (!is(source, "environment")) {
source <- evalSource(source, package = package, lock = FALSE)
rm(.cacheOnAssign, envir = source)
}
methods::insertSource(source, package = package, ...)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |