为什么for循环为第四次迭代分配等于6的值



此简单的循环以每行的最大值为单位,减去最小值,然后将结果分配给相应的行中的列" e"。" E"列中的所有结果值都是正确的,除了最后一个值。但是,for循环返回6作为答案。

#data frame
df <- data.frame(a=c(1,0,3,9),
            b=c(2,3,2,8),
            c=c(3,6,1,7),
            d=c(4,9,4,6))
#Simple for loop to generate new, calculated column "e"
for(i in 1:nrow(df)){
  df$e[i] <- max(df[i,])-min(df[i,])
}

这是一个循环,您不需要添加任何中介对象(除i(:

for(i in 1:nrow(df)) df[i, "e"] <- max(df[i,], na.rm=T) - min(df[i,], na.rm=T)
df
  a b c d e
1 1 2 3 4 3
2 0 3 6 9 9
3 3 2 1 4 3
4 9 8 7 6 3
  • 注意:需要na.rm,因为当df[2:nrow(df),"e"]的值分配为NA时,i <-1

我们可以使用 apply

做到这一点
df$e <- apply(df, 1, function(x) diff(range(x)))
df$e
#[1] 3 9 3 3

另一个选项是rowRanges的CC_6

library(matrixStats)
df$e <- c(diff(t(rowRanges(as.matrix(df)))))
df$e
#[1] 3 9 3 3

for循环中,我们可以创建一个临时对象来分配值,然后更新" E"列

tmp <- numeric(nrow(df))
for(i in 1:nrow(df)){
 tmp <- (max(df[i,]) - min(df[i,]))
}
df$e <- tmp
df$e
#[1] 3 9 3 3

最新更新