Я хочу создать функцию для запуска lm () для всех столбцов data.table, но указать зависимую (x) и по столбцам. Data.table, x и by аргументы передаются в функцию.
Я использую data.table [решение] [1] Дэвида Аренбурга с lapply () для вычисления lm () и пытаюсь передать переменныечерез функцию с deparse () и substitute () без успеха.
Ниже приведен MWE желаемого результата data.table и моя попытка функции, пытающаяся передать аргументы как переменные, а не как строки в кавычках.
Я считаю, что это связано с нестандартной оценкой (я читал NSE в Advanced R, но мое понимание не совсем там).
Любая помощь приветствуется, спасибо!
library(data.table)
set.seed(123)
# Sample dataset
data1 <- data.table(colA = 1:10,
colB = runif(10),
colC = runif(10),
colD = rep(c("apples", "bananas"),5))
# Desired functionality with .SDcols and by
works <- data1[, .(lm_results = lapply(.SD, function(x) {
lm_summary = summary(lm(colA ~ x))})),
.SDcols = -c("colA"),
by = .(colD)]
# attempted function
fun1 <- function(dt, y, by_col) {
x <- dt[, .(lm_results = lapply(.SD, function(x) {
summary(lm(substitute(y) ~ x))})),
.SDcols = -c(deparse(substitute(y)),),
by = .(substitute(by_col))]
return(x)
}
fails <- fun1(data1, colA, colD)
#> Error in `[.data.table`(dt, , .(lm_results = lapply(.SD, function(x) {: column or expression 1 of 'by' or 'keyby' is type symbol. Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]
Создано в 2019-10-16 в пакете Представ (v0.3.0)