我使用expand.grid生成向量元素的所有对,如:
v <- 1:3
expand.grid(v,v)这意味着:
Var1 Var2
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 3 2
7 1 3
8 2 3
9 3 3现在,假设我想要同样的东西,但是我用三胞胎
expand.grid(v,v,v)我如何将它推广到n元组,以便我可以使用new.expand.grid(v,5)并得到expand.grid(v,v,v,v,v)的结果?
发布于 2013-10-16 17:15:13
expand.grid可以将list作为它的输入,那么replicate呢?
expand.grid(replicate(3, v, simplify=FALSE))为了好玩,作为一种功能(虽然我知道您会知道如何做到这一点):
new.expand.grid <- function(input, reps) {
expand.grid(replicate(reps, input, simplify = FALSE))
}
new.expand.grid(c(1, 2), 4)
# Var1 Var2 Var3 Var4
# 1 1 1 1 1
# 2 2 1 1 1
# 3 1 2 1 1
# 4 2 2 1 1
# 5 1 1 2 1
# 6 2 1 2 1
# 7 1 2 2 1
# 8 2 2 2 1
# 9 1 1 1 2
# 10 2 1 1 2
# 11 1 2 1 2
# 12 2 2 1 2
# 13 1 1 2 2
# 14 2 1 2 2
# 15 1 2 2 2
# 16 2 2 2 2发布于 2013-10-16 17:34:09
do.call是向函数传递一组动态参数的标准方法:
new.expand.grid <- function(vec,nrep) do.call(expand.grid,rep(list(vec),nrep))示例:new.expand.grid(letters[1:2],4)
Var1 Var2 Var3 Var4
1 a a a a
2 b a a a
3 a b a a
4 b b a a
5 a a b a
6 b a b a
7 a b b a
8 b b b a
9 a a a b
10 b a a b
11 a b a b
12 b b a b
13 a a b b
14 b a b b
15 a b b b
16 b b b b发布于 2019-04-29 11:07:50
我认为最简单(也是最短的)解决方案如下:
expand.grid(rep(list(1:3), 2))
Var1 Var2
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 3 2
7 1 3
8 2 3
9 3 3https://stackoverflow.com/questions/19409601
复制相似问题