2017-04-12 45 views
2

我想填充一個矩陣,以便每個元素都是由其座標(行,列)組成的字符串。在數組座標中填充矩陣R

[ '1,1' '1,2' '1,3' ] 
[ '2,1' '2,2' '2,3' ] 
[ '3,1' '3,2' '3,3' ] 

我已經能夠方陣要做到這一點,但它並不十分可靠,如果我改變行或列的數目。

這是我迄今爲止

#Works but only with a square matrix 

x <- 20 #Number of rows 
y <- 20 #Number of columns 
samp <- 200 #Number of frames to sample 

grid = matrix(data = NA,nrow = x,ncol = y) 

for (iter_col in 1:y){ 
    for (iter_row in 1:x){ 
    grid[iter_col,iter_row] = paste(toString(iter_row),toString(iter_col),sep = ',') 
    } 
} 

我用這對隨機抽取的網格,我對細胞計數方法的圖像疊加。所以我還沒有任何數據。並非所有這些網格都具有相同數量的行和列。

你能幫我讓這更靈活嗎?我在R的背景是有點缺乏,所以我的解決方案在我面前...

謝謝!

編輯

我在grid[iter_col,iter_row]變量是在錯誤的順序。一旦它們被切換,它適用於不同尺寸的矩陣。

感謝G5W捕捉錯誤。

+0

你在做什麼應該與一個非方矩陣,除了你有參數切換,它是行先行,然後列'grid [iter_row,iter_col]' – G5W

+0

感謝您爲我捕捉。它現在工作! –

+3

'grid [] < - paste(row(grid),col(grid),sep =',')' – rawr

回答

1

下面是使用sapply

rows = 4 
columns = 5 
sapply(1:columns, function(i) sapply(1:rows, function(j) paste(j,i,sep = ", "))) 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] "1, 1" "1, 2" "1, 3" "1, 4" "1, 5" 
#[2,] "2, 1" "2, 2" "2, 3" "2, 4" "2, 5" 
#[3,] "3, 1" "3, 2" "3, 3" "3, 4" "3, 5" 
#[4,] "4, 1" "4, 2" "4, 3" "4, 4" "4, 5" 
+1

那正是我需要的!謝謝 –

1

我懷疑的一種方式,這將是更快:

matrix(paste0(rep(seq_len(x), times=y), ", ", rep(seq_len(y), each=x)), nrow = x, ncol = y) 

    [,1] [,2] [,3] [,4] [,5] 
[1,] "1, 1" "1, 2" "1, 3" "1, 4" "1, 5" 
[2,] "2, 1" "2, 2" "2, 3" "2, 4" "2, 5" 
[3,] "3, 1" "3, 2" "3, 3" "3, 4" "3, 5" 
[4,] "4, 1" "4, 2" "4, 3" "4, 4" "4, 5" 

或使用colrow(如在由@rawr意見所)

grid[] <- paste0(row(grid), ", ", col(grid))