Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中expand.grid函数的修改_R - Fatal编程技术网

R中expand.grid函数的修改

R中expand.grid函数的修改,r,R,我需要创建一个包含所有可能组合的矩阵 L<-12 vec <- c(0:21) lst <- lapply(numeric(L), function(x) vec) Mat1<-as.matrix(expand.grid(lst)) L您可以使用gtools软件包中的组合轻松完成此操作: result[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10][,11][,12] #> [1,] 11 10 9 8 7

我需要创建一个包含所有可能组合的矩阵

L<-12 
vec <- c(0:21)
lst <- lapply(numeric(L), function(x) vec)
Mat1<-as.matrix(expand.grid(lst))

L您可以使用
gtools
软件包中的
组合
轻松完成此操作:

result[,1][,2][,3][,4][,5][,6][,7][,8][,9][,10][,11][,12]
#> [1,]   11   10    9    8    7    6    5    4    3     2     1     0
#> [2,]   12   10    9    8    7    6    5    4    3     2     1     0
#> [3,]   13   10    9    8    7    6    5    4    3     2     1     0
#> [4,]   14   10    9    8    7    6    5    4    3     2     1     0
#> [5,]   15   10    9    8    7    6    5    4    3     2     1     0
我们有正确的尺寸:

dim(result)
#> [1] 646646     12

正如@AllanCameron所指出的,您所追求的等同于采用大小为12的所有
vec
组合——您还可以使用内置函数
combn

do.call(rbind, combn(vec, L, simplify = FALSE))
使用
data.table
可以更快地将
combn
的输出转换为所需格式:

library(data.table)
setDT(transpose(combn(vec, L, simplify=FALSE))

向量0:21真的是你感兴趣的数字吗,还是仅仅是一个样本向量,用来给我们一些工作?如果是,那么下面基于组合的答案将起作用,否则它们不会…@Spacedman IINM更健壮的版本将处理(1)重复和(2)缺失值。我认为OP的主要问题是创建一个巨大的22^12大小(380 PB)的输出(不可能)&他需要的子集——下面的两个答案都解决了这个问题,IINM可以用几个进一步的子集来修正,以适应这些概化。如果组成向量甚至没有排序呢?这就是为什么我喜欢在这样的情况下发布答案之前要求澄清!我想OP确实说了“组合”,这可能意味着combn(0:21,11)(或类似)…我想这里应该使用
rev(vec)
,因为OP“只需要组合,其中第一列中的值大于第二列中的值,第二列中的值大于第三列中的值,依此类推。”@thomasscoding yes!或者,使用
data.table
解决方案分配为
x
,我们可以执行
setcolorder(x,ncol(x):1)
library(data.table)
setDT(transpose(combn(vec, L, simplify=FALSE))