当函数使用elemets时,在矩阵上使用mapply'矩阵中的位置

时间:2016-10-23 16:25:50

标签: r matrix mapply

我想使用mapplyfun应用于矩阵的所有元素。当要应用的功能使用每个元素时,我不确定如何使用mapply'在矩阵中的位置。

    fun <- function(theta, mat, i, j){
    sum_nearby <- function(mat,i,j,dist){
        if (j - dist < 1) mat[i, j + dist] 
        else if (j + dist > ncol(mat)) mat[i, j - dist]
        else mat[i, j - dist] + mat[i, j + dist]
    }
        g0  <- -2*mat[i,j]
        g1  <- g0*sum_nearby(mat,i,j,1)

        -log1p(exp(theta %*% c(g0, g1)))
    }

1 个答案:

答案 0 :(得分:1)

对这样的行和列索引尝试locus = 7..11,其中mapply是问题中定义的函数。结果是数字向量fun

v

然后可以将其与此# test inputs theta <- 1:2 mat <- as.matrix(BOD) v <- mapply(fun, row(mat), col(mat), MoreArgs = list(theta = theta, mat = mat)) 相加或重新整形为与sum(v)具有相同尺寸的矩阵,如下所示:matreplace(mat, TRUE, v)array(v, dim(mat))matrix(v, nrow(mat))

注意:备选方案是使用0*mat+v返回与outer尺寸相同的矩阵:

mat

outer(1:nrow(mat), 1:ncol(mat), Vectorize(function(i, j) fun(theta, mat, i, j))) 返回上面apply解决方案中的向量:

mapply