一度に複数の 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'
これも意味がわかりません。ウェブで検索しても役に立ちません。関数を呼び出すときの引数 pattern、replacement & x がこの理由でしょうか? 誰かがこの問題について私を啓発したり、簡単な解決策を教えてくれたりしてくれたら本当にうれしいです (もしあれば)。
よろしくお願いします。