Я гуглил этот ответ в течение нескольких часов. Многие люди задавали подобные вопросы, но я не нашел ни достаточно простого вопроса, ни прямого ответа. Вот мой подход:
Предположим, что я хочу сделать простую группу в data.table
:
library(data.table)
mtcars = data.table(mtcars)
mtcars[,sum(mpg), gear]
# Here are the results
# gear V1
#1: 4 294.4
#2: 3 241.6
#3: 5 106.9
Однако, если я использую для этого самоопределяемую функцию:
zz = function(data, var, group){
return(data[,sum(var), group])
}
zz(mtcars, mpg, gear)
Я получил сообщение об ошибке:
Ошибка в eval (bysub, parent.frame(), parent.frame()): объект «шестерня» не найден
Я пробовал substitute
, eval
, quote
и другие решения, но ни одно из них не работает. Интересно, может ли кто-нибудь дать более простое решение и объяснение этому.
Спасибо и счастливого Хэллоуина!
env
substitute(expr, env)
, посколькуsubstitute
будет проверять переменные в окружении таблицы данных. Можете ли вы попробовать, изменивenv
31.10.2019