这与my struggles with installing from GitHub to an offline Window machine密切相关。
我figured out如何将包中的所有R代码放入我的命名空间,就好像它已经加载了library
一样。手动附加包的剩余障碍是确保我的函数可以访问任何原始调用(C / C ++ / Fortran / etc代码)。
我被困的地方是我不知道R知道如何找到给定的源函数。我们以我的宠物data.table
为例。 %chin%
函数直接向C
代码提出申诉,因此我认为这是一个很好的代表性示例:
`%chin%`
function (x, table)
{
.Call(Cchmatchwrapper, x, table, NA_integer_, TRUE)
}
假设我尚未将data.table
与library
相关联。从新的开始我的search
路径是:
search()
# [1] ".GlobalEnv" "tools:rstudio" "package:stats"
# [4] "package:graphics" "package:grDevices" "package:utils"
# [7] "package:datasets" "package:methods" "Autoloads"
# [10] "package:base"
我可以将%chin%
欺骗到data.table
名称空间中,如下所示:
attach(environment(), name = "package:data.table")
sys.source("~/data.table/R/data.table.R",
envir = as.environment("package:data.table"))
但%chin%
不起作用:
u = as.character(as.hexmode(1:10))
y = sample(u,5,replace=TRUE)
x = sample(u)
x %chin% y
x %chin% y
中的错误:找不到对象Cchmatchwrapper
有没有办法在不需要library
的情况下执行此操作?
假设我可以,是否还有其他任何我想要的东西让我的“欺骗”软件包的行为与通常附加的软件包完全相同?
我受到了@FrFlick在评论中的建议阅读的启发,试图再做一件事 - 正确设置我的欺骗环境的"path"
attr
,希望.Call
知道结果在哪里看:
attach(environment(), name = "package:data.table")
sys.source("~/data.table/R/data.table.R",
envir = x <- as.environment("package:data.table"))
attr(x, "path") <- "/home/michael/data.table/"
(但没有用)