我正在使用ddply拆分数据帧并将块发送给函数。在ddply行之前,我设置i=1。然后在函数中,我递增i,以便每个数据块都获得一个新的数字。但是,当我运行此命令时,每次调用该函数时,i都会重置为1。我认为这是因为每次i发送新的数据块时,都会重新分配函数外部的ddply。有没有一种方法可以在函数外部递增并将该数字与数据一起发送?

编辑::
这是呼叫线路:

rseDF <- ddply(rseDF, .(TestCompound), .fun = setTheSet)


这是函数:

##Set The Set Column
setTheSet <- function(df) {
if (df[,"TestCompound"] == "DNS000000001") df[,"Set"] <- "Control"
else {df[,"Set"] <- i
i <<- i+1}
return(df)
}

最佳答案

那只是一个普通的范围问题,如果您坚持要这样做,则需要对全局分配使用<<-

R> library(plyr)                    ## load plyr
R> i <- 1                           ## set counter
R> DF <- data.frame(a=rep(letters[1:3], each=3), b=1:9)
R> DF                               ## boring but simple data frame
  a b
1 a 1
2 a 2
3 a 3
4 b 4
5 b 5
6 b 6
7 c 7
8 c 8
9 c 9
R> ddply(DF, .(a), function(x) mean(x$b))     ## summarized
  a V1
1 a  2
2 b  5
3 c  8
R> ddply(DF, .(a), function(x) { i <<- i + 1; data.frame(i=i, res=mean(x$b)) })
  a i res
1 a 2   2
2 b 3   5
3 c 4   8
R>

关于r - R-ddply和递增计数器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7337029/

10-12 21:12