你如何阻止来源缩写功能名称?

时间:2012-09-14 14:59:38

标签: r function abbreviation

我正在尝试使用名称中的数字来源多个函数。

例如: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”。

1 个答案:

答案 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)
}