当矩阵的行数可变时,我想从矩阵的每一行 expand.grid
I want to expand.grid from each row of a matrix when the matrix could have variable number of rows
myMatrix <- matrix(c(1,2,3,4,5,6),2,3, byrow=T) # line 1
exp.myMatrix <- function(myMatrix) { # line 2
for (rownum in 1:nrow(myMatrix)) assign(paste("R",rownum, sep=""), myMatrix[rownum,]) # line 3
Combinations <- do.call(expand.grid, lapply(ls(pattern='^R\d$'), get)) # line 4
rm(list=ls(pattern='^R\d$')) # line 5
return(Combinations) # line 6
} # line 7
Combinations <- exp.myMatrix(myMatrix) # line 8
以上代码报错:"Error in FUN(X[[i]], ...) : object 'R1' not found".
但是,当我不使用该函数并且 运行 仅使用第 1、3、4、5 行时,我没有收到任何错误。但是我需要通过一个函数传递 myMatrix,因为矩阵的行数是可变的。另请注意,我需要 运行 第 5 行,因为我需要清除下一个矩阵的变量,该矩阵的行数可能比前一个矩阵少。
你必须使用:
do.call(expand.grid, split(myMatrix, rep(1:nrow(myMatrix), ncol(myMatrix))))
# 1 2
#1 1 4
#2 2 4
#3 3 4
#4 1 5
#5 2 5
#6 3 5
#7 1 6
#8 2 6
#9 3 6
myMatrix <- matrix(c(1,2,3,4,5,6),2,3, byrow=T) # line 1
exp.myMatrix <- function(myMatrix) { # line 2
for (rownum in 1:nrow(myMatrix)) assign(paste("R",rownum, sep=""), myMatrix[rownum,]) # line 3
Combinations <- do.call(expand.grid, lapply(ls(pattern='^R\d$'), get)) # line 4
rm(list=ls(pattern='^R\d$')) # line 5
return(Combinations) # line 6
} # line 7
Combinations <- exp.myMatrix(myMatrix) # line 8
以上代码报错:"Error in FUN(X[[i]], ...) : object 'R1' not found".
但是,当我不使用该函数并且 运行 仅使用第 1、3、4、5 行时,我没有收到任何错误。但是我需要通过一个函数传递 myMatrix,因为矩阵的行数是可变的。另请注意,我需要 运行 第 5 行,因为我需要清除下一个矩阵的变量,该矩阵的行数可能比前一个矩阵少。
你必须使用:
do.call(expand.grid, split(myMatrix, rep(1:nrow(myMatrix), ncol(myMatrix))))
# 1 2
#1 1 4
#2 2 4
#3 3 4
#4 1 5
#5 2 5
#6 3 5
#7 1 6
#8 2 6
#9 3 6