【发布时间】:2011-11-15 18:15:33
【问题描述】:
我想知道 R 中是否有一个内置函数,它将一个函数应用于矩阵的每个元素(当然,该函数应该基于矩阵索引计算)。相当于是这样的:
matrix_apply <- function(m, f) {
m2 <- m
for (r in seq(nrow(m2)))
for (c in seq(ncol(m2)))
m2[[r, c]] <- f(r, c)
return(m2)
}
如果没有这样的内置函数,初始化矩阵以包含通过计算具有矩阵索引作为参数的任意函数获得的值的最佳方法是什么?
【问题讨论】:
-
您熟悉恰如其分的
apply()系列函数吗? MARGIN 参数接受行、列和行和列的值。更何况还有不少 R 函数是矢量化的,可以避免这种类型的编程。 -
@leden 你能举个
f()的例子吗?据我所知,任何矢量化函数都可以在矩阵上工作,因为它只是一个带有 dim 属性的向量。您不需要将其分解为行和列索引。目前,您的 Q 存在一定的歧义;似乎您想要一个通用解决方案,但禁止它应该基于索引,这是次优的。 -
我的意思是,为什么
f()不能写成你真正需要的是m[] <- f(m)?我将添加一个示例... -
我认为 OP 需要回应我们所有人,而不仅仅是因为它有礼貌 :-) 。完全按照所写的方式阅读他的示例,m2 矩阵是使用函数“f(r,c)”生成的,该函数纯粹是索引的函数,与原始矩阵的内容无关。由于这可能不是他想要的,而不是 'g(r,c,m[r,c])' 或 'g(m[r,c])' ,到目前为止提供的答案非常好,但不是必须回答他的(模棱两可的)问题。
-
我只需要能够应用一个函数,该函数至少需要每个矩阵列的索引。一个这样的应用程序,假设我想创建一个乘法表,或者只是评估两个参数的某个函数并将结果存储到矩阵中。
标签: r function dictionary matrix apply