Из кода я прочитал, что lapply используется для перебора различных переменных, а не по уровням фактор. Таким образом, то вам нужно какое-то зацикливание структуры, но lapply плохой выбор:
- You перебирает вектор -names (сарай) - так что лучше использовать sapply
- Применить семью вернет результат из каждого цикла, чего вы не хотите. Таким образом, вы используете память без цели.
Во всяком случае, в случае, если вам нужно назначить что-то переменной в вашей глобальной окружающей среды в lapply, вам нужно < < - оператор. Скажем, вам нужно иметь несколько переменных, выбранных где пространства должны быть удалены:
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(i in c("X1","X3")){
levels(Df[,i])<-gsub(" +","",levels(Df[,i]))
}
ли что вам нужно без хлопот < < - оператор и без необходимости держать память без необходимости.
вы можете предоставить воспроизводимый пример ? Я пробовал ваш код с некоторыми тестовыми данными, и, похоже, работает нормально. можете ли вы уточнить, что не работает? – Ramnath