Передайте data.table и переменную в функцию - PullRequest
0 голосов
/ 22 января 2020

Я только начал изучать науку о данных, и у меня есть вопрос, который, вероятно, прост для вас. У меня есть набор данных, который выглядит примерно так:

df <- data.frame(id= c(1,1,1,2,2,2,3,3,3), time=c(1,2,3,1,2,3,1,2,3),y = rnorm(9), x1 = LETTERS[seq( from = 1, to = 9 )], x2 = c(0,0,0,0,1,0,1,1,1),c2 = rnorm(9))
df
#    id time     y      x1 x2     c2
# 1  1    1  0.6364831  A  0 -0.066480473
# 2  1    2  0.4476390  B  0  0.161372575
# 3  1    3  1.5113458  C  0  0.343956178
# 4  2    1  0.3532957  D  0  0.279987147
# 5  2    2  0.3401402  E  1 -0.462635393
# 6  2    3 -0.3160222  F  0  0.338454940
# 7  3    1 -1.3797158  G  1 -0.621169576
# 8  3    2  1.4026640  H  1 -0.005690801
# 9  3    3  0.2958363  I  1 -0.176488132

Я пишу функцию с несколькими шагами. Я хотел бы передать функцию с двумя элементами: набор данных и переменную интереса.

Однако эта функция выходит из строя на промежуточном этапе, когда я пытаюсь отфильтровать данные, используя таблицу данных. Важнейший шаг функции выглядит примерно так:

testfun<- function(dataset,var){
  intermediatedf<-unique(setDT(dataset)[var==1 & c2>0,.(y)])
return(intermediatedf)
}

Однако запуск df2<-testfun(df,y) не работает.

Может кто-нибудь помочь мне и объяснить, как я могу создать функцию, в которой я индексирую как набор данных, так и переменную?

Заранее благодарю за помощь

1 Ответ

1 голос
/ 22 января 2020

Вы можете использовать substitute и eval

testfun <- function(dataset, var) {
    var <- substitute(var)
    intermediatedf <- unique(dataset[eval(var) == 1 & c2 > 0, .(y)])
    return(intermediatedf)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...