R多重替换长度中的嵌套循环

时间:2018-02-13 18:51:06

标签: r nested-loops

我正在尝试创建一个可以生成以下内容的循环:

[1] 1 1
[2] 1 2
[3] 1 3
[4] 2 1
[5] 2 2
[6] 2 3
[7] 3 1
[8] 3 2
[9] 3 3

使用以下代码:

b<-list()
for (k in 1:9){
  for (i in 1:3) {
    for (j in 1:3){
      b[k]<- c(i,j)
    }
  }
}

但它不起作用

3 个答案:

答案 0 :(得分:1)

我不确定您希望返回什么样的结构,但是通过使用cbind()和R的便捷回收功能,您可以非常轻松地完成此操作而无需昂贵的循环。这将返回一个矩阵,这是数值数据最合适的结构。

cbind(rep(1:3, each=3), 1:3)
 #      [,1] [,2]
 # [1,]    1    1
 # [2,]    1    2
 # [3,]    1    3
 # [4,]    2    1
 # [5,]    2    2
 # [6,]    2    3
 # [7,]    3    1
 # [8,]    3    2
 # [9,]    3    3

答案 1 :(得分:0)

这只是1:3与1:3的交叉连接

data.table::CJ(1:3, 1:3)

但是,如果你想使用循环,你可以做

b <- list()
k <- 0
for (i in 1:3) {
    for (j in 1:3){
      k    <- k + 1
      b[[k]] <- c(i,j)
    }
}
b

答案 2 :(得分:0)

如果将数据框作为outpout可以,则可以使用expand.grid

expand.grid(1:3,1:3)

似乎没有简单的方法来控制哪个变量移动得更快,所以如果你需要它是第二个,你可以这样做:

expand.grid(1:3,1:3)[,2:1]

#    Var2 Var1
#  1    1    1
#  2    1    2
#  3    1    3
#  4    2    1
#  5    2    2
#  6    2    3
#  7    3    1
#  8    3    2
#  9    3    3