如何根据R中的变量循环输入值将输出值从for循环添加到data.frame?

时间:2016-03-13 02:12:04

标签: r loops variables declaration

main.Person{Name:"joe", StreetAddress:"123 Anywhere Anytown", Output:"Hello World", Status:1, EmailAddress:"joe@me.com"}

你好,

对不起我的转储问题,但我是R的新手,这实际上是我第一次尝试编码。

我使用indizes x和y创建了一个for循环,我希望将输出值(z)与data.frame中相应的x和y值一起保存。 发布的代码显然是错误的,但我没有得到它。

data.frame应如下所示:

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

z <- x+y

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

}
}

提前多谢你们! 来自德国的问候

2 个答案:

答案 0 :(得分: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之前存在的值。如果你想&#34;积累&#34;一个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());

答案 1 :(得分:1)

这是另一种解决方案

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