R多替换长度中的嵌套循环
Nested loops in R multiple replacement length
我正在尝试创建一个会生成以下内容的循环:
[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)
}
}
}
但是不行
我不确定您想要哪种结构 return,但是您可以通过使用 cbind()
和 R 方便的回收功能非常轻松地完成此操作而无需昂贵的循环。这return是一个矩阵,这是最适合数值数据的结构。
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: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
如果可以将数据框作为输出,可以使用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
我正在尝试创建一个会生成以下内容的循环:
[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)
}
}
}
但是不行
我不确定您想要哪种结构 return,但是您可以通过使用 cbind()
和 R 方便的回收功能非常轻松地完成此操作而无需昂贵的循环。这return是一个矩阵,这是最适合数值数据的结构。
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: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
如果可以将数据框作为输出,可以使用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