源(C等)功能在哪里附加?或者,我可以手动附加源代码吗?

时间:2016-02-19 00:40:30

标签: r packages

这与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.tablelibrary相关联。从新的开始我的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/"

(但没有用)

0 个答案:

没有答案