Неиспользованный аргумент - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь понять, как работают .SDcols и .SD. Я получил следующую функцию, которую я могу применить непосредственно в datatable, но не через lapply. Мне интересно, есть ли эквивалент с .SD, который позволяет передавать несколько параметров в тело функции. Приведенный ниже код всегда дает «Неиспользованный аргумент ...»

DT <- data.table(a=1:10,b=2:11,c=3:12,ID=c(rep("A",5),rep("B",5)))
doSomething <- function(a,b,c){
tmp <- a/b
tmp2 <- sqrt(tmp)^2000000
tmp3 <- tmp2 + tmp
return(rep(tmp3,length(a)))
}
DT[,doSomething(a,b,c)] # works
DT[,lapply(.SD,doSomething,a,b,c),.SDcol=c("a","b","c")]
DT[,lapply(.SD,doSomething,a=a,b=b,c=c),.SDcol=c("a","b","c")]

1 Ответ

1 голос
/ 31 марта 2020

Если нам нужно использовать .SD

out2 <- DT[, do.call(doSomething, .SD), .SDcols = a:c]

, что в противном случае можно записать как

DT[, doSomething(.SD[[1]], .SD[[2]], .SD[[3]]), .SDcols = a:c]

-checking

out1 <- DT[,doSomething(a,b,c)] 
identical(out1, out2)
#[1] TRUE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...