Из вашего кода я прочитал, что lapply используется для зацикливания разных переменных, а не уровней фактора.Тогда вам нужна какая-то циклическая структура, но lapply - плохой выбор:
- вы перебираете вектор-имена (сарай) - так что лучше использовать sapply
- Семейство apply будет возвращать результат из каждого цикла, чего вы не хотите.Таким образом, вы используете память без цели.
В любом случае, если вам нужно присвоить что-то переменной в вашей глобальной среде внутри приложения, вам нужен оператор << -.Скажем, вам нужно иметь несколько переменных, которые вы выбрали для удаления пробелов: </p>
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]))
}
Делает то, что вам нужно, без хлопот оператора << - и без лишнего хранения памяти. </p>