[英]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
關於您的嘗試的注意事項:
x
和y
進行初始分配。 在每個相應循環的第一次迭代中,這些值將被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.