如何根据 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 的新手,这实际上是我第一次尝试编写一些代码。

我用索引 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 的先前值。如果您想 "build up" 一次 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