0

我正在尝试获取多个功能,它们的名称不同。

例如:func1、func2。

我尝试使用“func_1”和“func_2”,以及将数字放在第一位,“1func”和“2func”。无论我如何索引函数名称,源函数只会读入它调用的一个函数"func"——这不是我想要的。

我尝试过使用 for-loops 和 sapply:

for循环:

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(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”。

4

1 回答 1

3

to 的参数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)
} 
于 2012-09-14T15:21:22.237 回答