我想使用mapply
将fun
应用于矩阵的所有元素。当要应用的功能使用每个元素时,我不确定如何使用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)))
}
答案 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)
具有相同尺寸的矩阵,如下所示:mat
或replace(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