如何在函数上使用 "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)
很难为我的问题找到一个有意义的标题。我想最好描述得更详细一些。
我想创建一个 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)