如何在函数上使用 "for loop" 而一个参数引用工作区 object

How to use a "for loop" on a function while one argument referring to a workspace object

很难为我的问题找到一个有意义的标题。我想最好描述得更详细一些。

我想创建一个 for 循环,其中 returns 一个由函数创建的 object 列表。 for 循环可以访问包含很多文件的路径(我的代码中的 E2)。此外,循环应该使用已经在我的工作区中的 objects(我的代码中的 E)。对于路径中的每个文件和我工作区中的 object,该函数应该执行它的任务。问题是函数似乎不接受 E 中的值(名称)作为函数第二个参数的 object。到目前为止这很清楚,但我如何在我的循环中实现它? 这是我的代码,我想您会立即看到问题所在:

for (id in 1:3){
    num = id
    E=as.symbol(paste("Sorb", num, sep = ''))
    E2=paste('mypath/file_', paste(num, 'txt', sep = "."), sep="")
    x=myfunction(arg1 = E2, arg2 = E)
    data=c(data,x)}

希望我的问题是可以理解的。到目前为止我读到的,使用 lapply 可能是一个解决方案?

在此先感谢您对我的帮助。

最好的, 托比

试试 get 函数。例如:

E=get(paste("Sorb", num, sep = ''))

看起来 myfunction() 适用于一个文件名值和一个符号。为您要访问的所有文件创建向量,并创建相应符号名称的向量。

num <- 1:3
filenames <- sprintf("mypath/file_%d.txt", num)
symnames <- paste0("Sorb", num)

使用 Map()(或 mapply())将此函数应用于每个文件名和符号(如果只有一个参数不同,那么您将使用 lapply())。

num <- 1:3
Map(function(filename, symname) {
    myfunction(filename, get(symname))
}, filenames, symnames)