我不确定排列是否正确。我想给出一组n个向量(即[1,2]
,[3,4]
和[2,3]
)置换它们并得到
[1,3,2],[1,3,3],[1,4,2],[1,4,3],[2,3,2] etc.
R中是否会执行此操作?
答案 0 :(得分:12)
这是一个有用的案例,用于将向量存储在列表中,并使用do.call()
为您安排适当的函数调用。 expand.grid()
是您想要的标准功能。但是,您不必输入或命名单个向量,请尝试:
> l <- list(a = 1:2, b = 3:4, c = 2:3)
> do.call(expand.grid, l)
a b c
1 1 3 2
2 2 3 2
3 1 4 2
4 2 4 2
5 1 3 3
6 2 3 3
7 1 4 3
8 2 4 3
然而,尽管我的聪明才智,但事实证明expand.grid()
接受了一个列表:
> expand.grid(l)
a b c
1 1 3 2
2 2 3 2
3 1 4 2
4 2 4 2
5 1 3 3
6 2 3 3
7 1 4 3
8 2 4 3
答案 1 :(得分:8)
这是expand.grid
的作用。
从帮助页面引用:从提供的矢量或因子的所有组合中创建数据框。结果是data.frame
,每个组合都有一行。
expand.grid(
c(1, 2),
c(3, 4),
c(2, 3)
)
Var1 Var2 Var3
1 1 3 2
2 2 3 2
3 1 4 2
4 2 4 2
5 1 3 3
6 2 3 3
7 1 4 3
8 2 4 3