我正在尝试使用名称中的数字来源多个函数。
例如:func1,func2。
我尝试使用“func_1”和“func_2”,以及将数字放在第一位,“1func”和“2func”。无论我如何索引函数名,源函数只读入一个它调用"func"
的函数 - 这不是我想要的。
我尝试过使用for-loops和sapply:
作为环
func.list <- list.files(path="/some_path",pattern="some pattern",full.names=TRUE)
for(i in 1:length(func.list)){
source(func.list[i])
}
sapply:
sapply(func.list,FUN=source)
我将编写多个版本的数据更正函数,并且真的希望能够对它们编制索引 - 因为给出一个简洁但具体的名称将是困难的,并且不允许我选择性地仅提供来自其目录的功能文件。
在我的代码中,func.list给出了输出(由于隐私/合同问题,我已经替换了实际目录):
[1] "mypath/1resp.correction.R"
[2] "mypath/2resp.correction.R"
然后,当我使用for-loop或sapply代码(如上所列)获取func.list时,R只加载一个名为resp.correction的函数,代码体为“2resp.correction.R”。
答案 0 :(得分:3)
source
的参数是文件名,而不是函数名。所以你不能在这里看到:你需要提供确切的文件名。
听起来你的两个文件包含两个文件中具有相同名称(resp.correction
)的函数的定义,所以是的,当你一个接一个地传出一个文件时,你的全局环境中的函数被覆盖了
您可以在循环内部将函数重新分配给另一个名称:
func.list <- list.files(path="/some_path",pattern="some pattern",full.names=TRUE)
for(i in 1:length(func.list)) {
source(func.list[i], local = TRUE)
assign(paste0("resp.correction", i), resp.correction, envir = .GlobalEnv)
}