在R中使用数组坐标填充矩阵

3
我将尝试填充一个矩阵,以便每个元素都是由其坐标(行,列)组成的字符串。
例如:
[ '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指出这个错误。

你所做的应该适用于非方阵,只是你的参数顺序颠倒了。它应该是先行后列 grid[iter_row,iter_col] - G5W
谢谢你帮我发现了这个问题。现在它可以工作了! - M. Bu
3
grid[] <- paste(row(grid), col(grid), sep = ', ') - rawr
@rawr - 那应该是一个答案 - 这绝对是最简单的方法。 - thelatemail
2个回答

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
这正是我所需要的!谢谢 - M. Bu

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接