gpt4 book ai didi

r - 未找到 insertSource() : "object ' . cacheOnAssign 错误”

转载 作者:行者123 更新时间:2023-12-03 18:20:54 25 4
gpt4 key购买 nike

我正在尝试使用功能 insertSource (R 2.12 中的新功能)更新我已对其进行更改的函数。
但是,当我以这种方式使用该功能时:

insertSource('filename.R', package = 'mypackage')
我收到错误:
Error in get(this, envir = envp) : object '.cacheOnAssign' not found
不幸的是,我无法提出一个简单的可重现示例 - 如果有帮助,请建议我如何做 - 但我发现以下代码确实有效:
system("echo 'nls <- function(nls) return(nls)' > foo.R")
insertSource('foo.R', package = stats)
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
    >
    不知道如何看待这些结果,以及从这里开始
    使用 options(error = browser)提供了我放在 text file 中的更多信息

    最佳答案

    这可以说是 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, ...)
    }

    关于r - 未找到 insertSource() : "object ' . cacheOnAssign 错误”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981005/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com