我正在尝试编写一个函数,该函数可以一次将另一个函数应用于多个 data.frames。data.frames 命名为 DATA_1、DATA_2 等,变量“actioncol”用于指示必须更改的列。到目前为止,这是我的代码:
gsubFUN <- function(name, actioncol, ...){
df.vec <- ls(pattern = paste("name", "*", sep="_"), envir=.GlobalEnv)
for(ii in 1:length(df.vec)){
DATA <- get(df.vec[ii])
DATA[,actioncol] <- gsub(pattern.vec[ii], replace.vec[ii], DATA[,actioncol])
assign(paste(name, ii, sep = "_"),DATA, envir = .GlobalEnv)
}
}
我知道我的代码可能很混乱,但它确实有效。因为我希望外部函数也可以在 data.frames 上应用其他函数(不仅仅是 gsub),所以我尝试用一个变量替换它:
multiDfFUN <- function(name, actioncol, FUN, ...){
df.vec <- ls(pattern = paste(name, "*", sep="_"), envir=.GlobalEnv)
for(ii in 1:length(df.vec)){
DATA <- get(df.vec[ii])
DATA[,actioncol] <- match.fun(FUN)
assign(paste(name, ii, sep = "_"),DATA, envir = .GlobalEnv)
}
}
multiDfFUN(name="audi", actioncol="color", FUN=gsub, pattern=pattern.vec[ii],
replacement=replace.vec[ii], x=DATA[,actioncol])
但是,这现在返回一条错误消息:
error in rep(value, length.out = n) :
attempt to replicate an object of type 'closure'
我什至不明白这是什么意思。搜索网络也无济于事。调用函数时的参数模式、替换和 x 可能是导致此问题的原因吗?如果有人能在这个问题上启发我,甚至指出一个简单的解决方案(如果有的话),我会非常高兴。
提前谢谢了。