Все еще относительно новое для R. Попытка иметь динамические переменные в цикле, но сталкивается со всеми видами проблем. Первоначальный код выглядит примерно так (но больше)R переменные имена в цикле, get и т. Д.
data.train$Pclass_F <- as.factor(data.train$Pclass)
data.test$Pclass_F <- as.factor(data.test$Pclass)
, который я пытаюсь построить в петлю, представляя себе что-то вроде этого
datalist <- c("data.train", "data.test")
for (i in datalist){
i$Pclass_F <- as.factor(i$Pclass)
}
, который не работает. Небольшое исследование подразумевает, что для преобразования строки datalist
в переменную мне нужно использовать функцию get
. Поэтому моя следующая попытка была
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i$Pclass_F) <- as.factor(get(i$Pclass))
}
который все еще не работает Error in i$Pclass : $ operator is invalid for atomic vectors
. Протестировано
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i)$Pclass_F <- as.factor(get(i)$Pclass)
}
который все еще не работает Error in get(i)$Pclass_F <- as.factor(get(i)$Pclass) : could not find function "get<-"
. Даже попробовал
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i[Pclass_F]) <- as.factor(get(i[Pclass]))
}
который все еще не работает Error in get(i[Pclass]) : object 'Pclass' not found
. Испытанный
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i)[Pclass_F] <- as.factor(get(i)[Pclass])
}
, который до сих пор не работает Error in '[.data.frame'(get(i), Pclass) : object 'Pclass' not found
Теперь понял, что никогда не были включены данные, так что никто не может запустить это сами, но только, чтобы показать, что это не проблема данных
> class(data.train$Pclass)
[1] "integer"
> class(data.test$Pclass)
[1] "integer"
> datalist
[1] "data.train" "data.test"
Остановите структурирование кода вокруг 'get'. Запретите это из своего лексикона, пока вы не окажетесь намного лучше в R. В любое время вы считаете «динамическую переменную», останавливаете и создаете именованный список. Поместите их в фактический список и используйте индексирование: 'L <- list (data.train = data.train, data.test = data.test)'. – joran
Я согласен, что это ужасное кодирование. Не в первый раз я вижу это на SO. Я действительно удивляюсь, откуда берутся эти плохие привычки, и как они получили «интуитивный» и «естественный» для ОП. Я думаю, что это точка зрения (и основная) для решения. –
@ColonelBeauvel Я бы не стал слишком тяжелым на OP. Быть новичком обычно означает просто пытаться найти что-то, что «работает», и вы узнаете, является ли оно «хорошим» в этом процессе. Я нахожу эту конкретную проблему расстраивающей, потому что она часто встречается, но случай использования каждого человека настолько отличается, что очень сложно написать один всеобъемлющий ресурс, который эффективно отводит людей от 'get' и' assign'. – joran