R:将函数应用于以向量元素作为参数的矩阵

标签 r matrix vector apply

假设我想对矩阵的每一行应用一个函数。该函数的参数之一采用向量。我想将向量的第一个元素应用于第一行,将第二个元素应用于第二行,依此类推。

例如:

set.seed(123)
df<-matrix(runif(100), ncol=10)

var2 <- c(1:10)

MYFUNC <- function(x, Var=NA){ 
  sum(x)/Var 
}

我试过这个:
apply(df, 1, function(x) MYFUNC(x, Var=var2))

但这给了我一个 10x10 的矩阵,其中的函数应用于每一行和 Var 组合,而我只对对角线元素感兴趣。我还查看了 mapply函数,但我不确定如何在这种情况下应用它。

任何帮助将非常感激。

最佳答案

Mapply绝对是一种可能。这应该有效:

mapply(MYFUNC, x = as.data.frame(t(df)), Var = var2)

#V1        V2        V3        V4        V5        V6        V7        V8        V9       V10 
#5.0795111 2.8693537 1.8285747 1.3640238 0.8300597 0.6280441 0.7706310 0.6720132 0.5719003 0.4259674 

我认为您遇到的问题是 mapply采用向量或列表。在 R 中,矩阵不是列表,而是 data.frame是。您需要做的就是转置矩阵并转换为 data.frame然后 mapply应该管用。 data.frame 中的每一列是列表中的一个元素,这就是为什么我们必须对其进行转置(以便每个 row 将映射到向量中的每个元素)。

关于R:将函数应用于以向量元素作为参数的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643665/

相关文章:

r - 平均值,忽略零和特定变量

ROracle 未获取全文变量

c - 求方阵的最大对角元素

r - R 中的粗体箱线图标签

r - 将向量列表转换为数据框

Ruby 核心 Matrix 与 NArray 的 NMatrix

c++ - 保留和删除 vector ?

c++ - 如何遍历节点 vector

Android - 当 activity.setContentView 完成渲染时是否触发了任何事件?

c++ - 在其边缘旋转刚体?