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

时间:2017-05-02 03:15:01

标签: r

这个简单的for循环取每行中的最大值,减去最小值,并将结果赋给相应行中的列“e”。列“e”中的所有结果值都是正确的,除了最后一个,它应该等于3.但是,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,])
}

2 个答案:

答案 0 :(得分:1)

我们可以使用 [Route] public ActionResult Index() { var model = new T(); return RedirectToAction("Search", model); }

执行此操作
apply

另一个选项是来自df$e <- apply(df, 1, function(x) diff(range(x))) df$e #[1] 3 9 3 3

rowRanges
matrixStats

library(matrixStats) df$e <- c(diff(t(rowRanges(as.matrix(df))))) df$e #[1] 3 9 3 3 循环中,我们可以创建一个临时对象来分配值,然后更新&#39; e&#39;柱

for

答案 1 :(得分:1)

这是一个循环,你不需要添加任何中间对象(除了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