函数中的Dplyr命令

时间:2016-11-08 00:38:49

标签: r class dplyr piping

我有一个数据集和三个函数。第一个函数主题(x,n)有两个参数:对象x和值n。 subject()将x转换为data.frame类,然后使用管道运算符%>%在x上应用dplyr函数。 然后,主题(x,n)返回的对象将与主题(x,n)链接的函数visit(x,n)与管道运算符%>%一起提供。 visit(x,n)函数将接收到的对象的类转换为data.frame,然后在数据帧上应用dplyr的filter()函数,并在将其转换为“visit”类后返回结果数据帧。最后,第三个函数室(x,r)与管道运算符%>%与visit(x,n)链接,在接收到的对象上应用filter(),之后将其类更改为dataframe并返回一个对象类“房间”功能“访问”和“房间”不按设计工作。我想知道你是否可以帮我理解错误及其原因,并提出修改代码的方法。谢谢。

       > 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

1 个答案:

答案 0 :(得分:0)

代码应改变如下:

        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")
               }

编辑完成后代码没有问题