/ Comandos / Dplyr dentro de uma função - r, classe, dplyr, tubulação

Comandos Dplyr dentro de uma função - r, classe, dplyr, tubulação

Eu tenho um conjunto de dados e três funções. A primeira função subject (x, n) possui dois argumentos: um objeto xe um valor n. subject () converte x em uma classe data.frame e aplica as funções dplyr em x usando o operador de tubulação%>%. Então, o objeto retornado pelo sujeito (x, n) alimenta a função visit (x, n) que está vinculada ao assunto (x, n) com o operador de tubulação%>%. A função visit (x, n) converte a classe do objeto que recebe para um data.frame, em seguida, aplica a função filter () de dplyr no dataframe e retorna o dataframe resultante após convertê-lo em uma classe "visit". Por último, uma terceira sala de função (x, r) é vinculada ao operador de pipe%>% com visit (x, n), aplica um filtro () no objeto recebido, depois de mudar sua classe para dataframe e retorna um objeto de class "room" As funções "visit" e "room" não funcionam como planejadas. Gostaria de saber se você poderia me ajudar a entender o erro e suas causas e sugerir maneiras de corrigir o código. Obrigado.

       > y
id visit    room value timepoint
1  14     0 bedroom  6.00        53
2  15     0     den  6.00        54
3  14     1     den  2.75        55
4  14     0 bedroom  2.75        56
5  17     1     den  2.75        57
6  15     1 bedroom  2.75        58
7  16     2     den  6.00        59
8  16     2     den  6.00        60
9  14     2     den  2.75        61
10  12     0     den  2.75        62


subject <- function(x, n){
class(x) <- "data.frame"
y <- x %>% select(id, visit, room, value) %>% filter(id == n)
structure(y, class = c("subject"))
}

visit <- function(x, n){
class(x) <- "data.frame"
x %>% filter(visit == n)
structure(x, class = "visit")
}

room <- function(x, r){
class(x) <- "data.frame"
x %>% filter(room == r)
structure(x, class = "room")
}

w <- subject(y, 14) %>% visit(0) %>% room("bedroom")

class(w) <- "data.frame"

w

id visit    room value
1 14     0 bedroom  6.00
2 14     1     den  2.75
3 14     0 bedroom  2.75
4 14     2     den  2.75

Respostas:

0 para resposta № 1

O código deve ser alterado da seguinte forma:

        visit <- function(x, n){
class(x) <- "data.frame"
y <- x %>% filter(visit == n)
structure(y, class = "visit")
}

room <- function(x, r){
class(x) <- "data.frame"
y <- x %>% filter(room == r)
structure(y, class = "room")
}

Após as edições, o código funcionou sem problemas