2015-05-25 24 views
1

我想從一個矩陣的每一行應用於expand.grid當基質可以具有可變數量的行

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

上面的代碼給出錯誤:「錯誤在FUN(X [[I]] ,...):找不到對象'R1'「。

但是,當我不使用該函數並只運行第1,3,4,5行時,我沒有得到任何錯誤。但是我需要通過函數傳遞myMatrix,因爲矩陣的行數是可變的。另請注意,我需要運行第5行,因爲我需要清除下一個矩陣的變量,該矩陣的行數可能比前一行少。

+0

這個瘋狂的複雜的東西簡單....用'R'這種方式與分配/ get是編碼差,因爲它會導致與環境不受效力於傾倒變量全球envir ...必須避免! –

回答

0

你必須願意使用:

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 
相關問題