gpt4 book ai didi

R - ddply 并增加一个计数器

转载 作者:行者123 更新时间:2023-12-04 06:56:44 28 4
gpt4 key购买 nike

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

编辑:这是电话线:

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 - ddply 并增加一个计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7337029/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com