从函数值有效地创建矩阵

fot*_*ton 6 r function matrix

经验丰富的R开发人员会考虑使用给定函数构造具有给定数量的行和列的矩阵的最有效(但仍然可读)的方式,例如A_ij = someFun(i,j),其中1 <= i <=行,1 <= j <= cols?

因为我在文档中找不到任何东西

initMatrix <- function(rows, cols, fn) {
    A <- matrix(nrow=rows, ncol=cols)
    for (i in 1:rows)
        for (j in 1:cols)
            A[i,j] <- fn(i,j)
    return(A)
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很愚蠢.欢迎任何改进(特别是单线)!:)

Ben*_*ker 7

我认为你正在寻找outer(seq(rows),seq(cols),fn) (或者如下所示,outer(seq_len(rows),seq_len(cols),fn):需要一些例子来看看它有多大差异).

你可以通过这种方式获得很多可读性(至少如果你不必去?outer查找发生了什么),但我实际上并不认为你节省了很多时间.如果您fn的矢量化开头,可能会有更聪明,更有效的东西:是吗?


cbe*_*ica 6

看看outer:

> outer (LETTERS [1:3], letters [4:7], paste)
     [,1]  [,2]  [,3]  [,4] 
[1,] "A d" "A e" "A f" "A g"
[2,] "B d" "B e" "B f" "B g"
[3,] "C d" "C e" "C f" "C g"
Run Code Online (Sandbox Code Playgroud)