【问题标题】:Filling matrix with array coordinates in R用R中的数组坐标填充矩阵
【发布时间】:2017-09-08 19:17:52
【问题描述】:

我正在尝试填充一个矩阵,以便每个元素都是一个由其坐标(行、列)组成的字符串。

[ '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]
  • 感谢您帮我解决这个问题。现在可以了!
  • grid[] &lt;- paste(row(grid), col(grid), sep = ', ')
  • @rawr - 这应该是一个答案 - 这是迄今为止最简单的方法。

标签: r for-loop matrix coordinates


【解决方案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"

【讨论】:

  • 这正是我所需要的!谢谢
【解决方案2】:

我怀疑这会更快:

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 在cmets 中所述)

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

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2018-01-23
    • 2012-03-06
    • 2013-06-20
    相关资源
    最近更新 更多