あなたのコードから、因子のレベルではなく、さまざまな変数をループするためにlapplyが使用されていることがわかりました。したがって、ある種のループ構造が必要ですが、lapplyは悪い選択です。
- ベクトル-names(barn)-をループするので、sapplyを使用することをお勧めします
- applyファミリーは、各ループからの結果を返しますが、これは望ましくありません。つまり、目的のないメモリを使用しているのです。
とにかく、ラップリー内のグローバル環境の変数に何かを割り当てる必要がある場合は、<<-演算子が必要です。スペースを削除する必要がある場所で、選択したいくつかの変数が必要だとします。
f <- paste("",letters[1:5])
Df <- data.frame(
X1 = sample(f,10,r=T),
X2 = sample(f,10,r=T),
X3 = sample(f,10,r=T)
)
# Bad example :
lapply(c("X1","X3"),function(x){
levels(Df[,x])<<-gsub(" +","",levels(Df[,x]))
})
与える
> str(Df)
'data.frame': 10 obs. of 3 variables:
$ X1: Factor w/ 3 levels "a","b","c": 2 3 1 1 1 2 3 2 2 2
$ X2: Factor w/ 5 levels " a"," b"," c",..: 4 5 4 2 5 5 1 2 5 3
$ X3: Factor w/ 5 levels "a","b","c","d",..: 2 3 4 1 4 1 3 3 5 4
forループを使用することをお勧めします:
for( i in c("X1","X3")){
levels(Df[,i])<-gsub(" +","",levels(Df[,i]))
}
<<-演算子の手間をかけずに、またメモリを不必要に保持することなく、必要なことを実行します。