首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >expand.grid的动态参数

expand.grid的动态参数
EN

Stack Overflow用户
提问于 2013-10-16 17:13:27
回答 3查看 3.2K关注 0票数 8

我使用expand.grid生成向量元素的所有对,如:

代码语言:javascript
复制
v <- 1:3
expand.grid(v,v)

这意味着:

代码语言:javascript
复制
  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

现在,假设我想要同样的东西,但是我用三胞胎

代码语言:javascript
复制
expand.grid(v,v,v)

我如何将它推广到n元组,以便我可以使用new.expand.grid(v,5)并得到expand.grid(v,v,v,v,v)的结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-16 17:15:13

expand.grid可以将list作为它的输入,那么replicate呢?

代码语言:javascript
复制
expand.grid(replicate(3, v, simplify=FALSE))

为了好玩,作为一种功能(虽然我知道您会知道如何做到这一点):

代码语言:javascript
复制
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
票数 15
EN

Stack Overflow用户

发布于 2013-10-16 17:34:09

do.call是向函数传递一组动态参数的标准方法:

代码语言:javascript
复制
new.expand.grid <- function(vec,nrep) do.call(expand.grid,rep(list(vec),nrep))

示例:new.expand.grid(letters[1:2],4)

代码语言:javascript
复制
   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
票数 6
EN

Stack Overflow用户

发布于 2019-04-29 11:07:50

我认为最简单(也是最短的)解决方案如下:

代码语言:javascript
复制
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    3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19409601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档