我正在使用来自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)}
}
答案 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,而且适用于所有编程语言。