2016-11-08 48 views
0

我有一个数据集和三个函数。第一个函数主题(x,n)有两个参数:一个对象x和一个值n。 subject()将x转换为data.frame类,然后使用管道运算符%>%在x上应用dplyr函数。 然后由subject(x,n)返回的对象用管道操作符%>%提供与主体(x,n)链接的函数visit(x,n)。 visit(x,n)函数将其接收的对象的类转换为data.frame,然后将dplyr的filter()函数应用于数据框,并在将其转换为“访问”类后返回结果数据框。最后,第三个函数空间(x,r)通过visit(x,n)与管道运算符%>%相关联,在接收到的对象上应用filter(),并将其类更改为dataframe并返回班级“房间”功能“访问”和“房间”不按设计工作。我想知道您是否可以帮助我了解错误及其原因,并提出修复代码的方法。谢谢。函数内的Dplyr命令

 > 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 
+0

需要使用'回溯()'找出其中的这个序列调用不正确地调用'match'。如果你可以发布'dput(y)',这将是理想的。 –

+1

'class = visit'或'class =“visit”'? – HubertL

+0

你说得对。它是class =“visit” – gk7

回答

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

的编辑后的代码工作没有问题