2015-01-21 2 views
0

Я довольно новичок в программировании R. Может кто-нибудь сказать, почему этот код продолжает давать ошибку: paste0("emissions_for_",yr) <- sum(nei_tst[,var][select_obs], na.rm=TRUE)Ошибка присвоения значения построенной переменной в R

  • (nei_tst является dataframe)
  • (вар является переменной, которая присваивается имя одного столбца в этом dataframe)
  • select_obs является переменная с логическими элементами (результат теста: yr == "1999")

Я получаю foll. Ошибка: Error in paste0("emissions_for_", yr) <- sum(nei_tst[, var][select_obs], : target of assignment expands to non-language object

+1

Без [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), это не так просто, чтобы предоставить вам специфику , Я думаю, вам нужно что-то вроде 'tapply (nei_tst [, var], nei_tst $ yr, sum, na.rm = TRUE)' даст вам результат, который вы хотите. Построение имен переменных, таких как строки, просто не является хорошей идеей в R и часто затрудняет работу. Я настоятельно рекомендую вам избежать этой стратегии. – MrFlick

ответ

1

Вы должны использовать assign если имя объекта хранится в виде строки символов:

assign(paste0("emissions_for_",yr), sum(nei_tst[,var][select_obs], na.rm=TRUE)) 

Однако создание нескольких переменных динамически хранить несколько значений в не хорошем стиле R. Вы должны хранить все связанные значения в одном объекте, например, в списке или в фрейме данных.

+0

@MrFlick Согласен. Я добавил комментарий. –

+0

Спасибо, ребята, просто так просто! !! (Мистер Флик, я думаю, вы действительно помогли мне ответить и на другой вопрос). – Robert

0

Возможно, вам не будет лучше создавать dataframe и индексировать по годам?

emissions <- data.frame(yr, sum(nei_tst[,var][select_obs], na.rm=TRUE)) 
Смежные вопросы