簡體   English   中英

如何根據R中的變量循環輸入值將for循環的輸出值添加到data.frame?

[英]How to add output values from a for-loop to a data.frame depending on the variable loop input values in R?

x <- 1
y <- 1
for (y in 1:2){
    for (x in 1:2){

z <- x+y

zresults <- data.frame(x, y, z)

}
}

大家好

對我的轉儲問題感到抱歉,但是我是R語言的新手,這實際上是我第一次嘗試編寫一些代碼。

我用indize x和y創建了一個for循環,我想將輸出值(z)以及相應的x和y值保存在data.frame中。 發布的代碼顯然是錯誤的,但我不明白。

data.frame應該看起來像這樣:

  x y z
1 1 1 2
2 2 1 3
3 1 2 3
4 2 2 4

提前謝謝大家! 來自德國的問候

這是一種您想做的事情:

zresults <- expand.grid(x=1:2,y=1:2);
zresults$z <- zresults$x + zresults$y;
zresults;
##   x y z
## 1 1 1 2
## 2 2 1 3
## 3 1 2 3
## 4 2 2 4

關於您的嘗試的注意事項:

  • 不需要對xy進行初始分配。 在每個相應循環的第一次迭代中,這些值將被RHS向量的第一個值(在每種情況下為1 )覆蓋。 另外值得注意的是,與C / C ++和Java之類的語言不同,在R中,您不必聲明變量。 任何變量名稱都可以隨時分配一個值。
  • 在您的內部循環中,您正在分配zresults 第一次迭代后,您將覆蓋 zresults的先前值。 如果您想一次“建立”一個data.frame行,則可以使用以下解決方案,盡管請注意,使用這些方法的性能並不理想:

zresults[nrow(zresults)+1L,] <- c(x,y,z);

要么

zresults <- rbind(zresults,c(x,y,z));

還要注意, zresults必須在構建循環之前首先進行初始化; 例如:

zresults <- data.frame(x=integer(),y=integer(),z=integer());

這是另一種解決方案

x = 1
y = 1
result = NULL
for (y in 1:2) {
  for (x in 1:2) {
    z = x + y
    if (is.null(result)) {
      result = data.frame(x,y,z)
    } else {
      result = rbind(result, data.frame(x,y,z))
    }
  }
}
result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM