函数使用If语句没有执行

时间:2016-06-04 18:34:35

标签: r function if-statement dplyr

我正在使用来自R的包dplyr。我阅读了教科书和在线文章,但我无法弄清楚为什么这个功能不起作用。有人可以指出如何修复我的功能吗?

##creating dataset - this dataset is ranked by group (ID)
dt <- data.frame(
    ID = c('A1','A2','A4','A2','A1','A4','A3','A2','A1','A3'),
    Value = c(4,3,1,3,4,6,6,1,8,4));
dt2<-transform(dt, order.by.group = 
    ave(Value, ID, FUN = function(x) rank(x, ties.method = "first")))


##This function does not work, but it's supposed to create dt3 which is based
##on condition such as "best","worst" ranking etc in each ID group

test<- function(num="best") {
    if (num=="best") {
        dt3<-filter(dt2,order.by.group==1)}
    else if (num=="worst") {
        #sort to make low rank come to the last row position
        dt2<-arrange(dt2,ID,order.by.group)
        # Select the last row by id
        dt3<-dt2[!duplicated(dt2$ID, fromLast=TRUE), ]}
    else {dt3<-filter(dt2,order.by.group==num)}
}

1 个答案:

答案 0 :(得分:0)

现在呢?

test<- function(num="best") {
  if (num=="best") {
    dt3<-filter(dt2,order.by.group==1)
    } else if (num=="worst") {
    #sort to make low rank come to the last row position
    dt2<-arrange(dt2,ID,order.by.group)
    # Select the last row by id
    dt3<-dt2[!duplicated(dt2$ID, fromLast=TRUE), ]
    } else {
    dt3<-filter(dt2,order.by.group==num)
    }
 return(dt3)
 }

你的功能似乎缺少return声明。

<强>更新

  

哦,这就解决了我的目的。但我仍然想知道为什么对象dt3没有出现在全球环境中。我的意思是当我在控制台中输入dt2时,会在那里显示结果,但是当我输入dt3时,它会显示“错误:找不到对象'dt3'”

调用此功能时,请执行dt3 <- test()。函数内的dt3局部变量;它在功能退出时被销毁。但是,通过显式赋值:dt3 <-,在全局环境中创建变量dt3,接受函数的返回值。

变量的范围不仅适用于R,而且适用于所有编程语言。