我正在尝试创建一个可以生成以下内容的循环:
[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)
}
}
}
但它不起作用
答案 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