2015-03-25 3 views
1

Моя цель - назвать новый столбец таблицы данных на основе значения другой переменной. Как правило, это было бы просто, но с таблицами данных любое значение имени столбца принимается как строка, а не переменная (я думаю?)Ошибка использования eval() для вызова столбца data.table в r

Для этого я думал, что воспользуюсь функцией eval. Мой код:

library(data.table) 

DT <- data.table(x = c(1,1,2,2,3), y = 6:10, z = 11:15) 

sumtitle <- "Sum" 

Output <- DT[ , j = list(eval(sumtitle) = sum(y)), by = x] 

но это возвращает

Error: unexpected '=' in "Output <- DT[ , j = list(eval(sumtitle) =" 

Это странно для меня, потому что

> eval(sumtitle) 
[1] "Sum" 

и

Output <- DT[ , j = list("Sum" = sum(y)), by = x] 

работает, как ожидалось.

Любая помощь будет высоко оценена.

ответ

8

Проблема не data.table. Вы пытаетесь указать имя аргумента в качестве выражения, которое напрямую не является законным:

sumtitle <- "Sum" 
y <- 1:10 
list(eval(sumtitle) = sum(y)) 
# Error: unexpected '=' in "list(eval(sumtitle) =" 

Производит ту же ошибку. Попробуйте вместо этого:

DT[ , j = setNames(list(sum(y)), sumtitle), by = x] 

    x Sum 
1: 1 13 
2: 2 17 
3: 3 10 
Смежные вопросы