假设我想将一个函数应用于矩阵的每一行 . 函数的一个参数采用向量 . 我想将向量的第一个元素应用于第一行,将第二个元素应用于第二行,等等 .
例如:
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
函数,但我不确定如何在这种情况下应用它 .
任何帮助将非常感激 .
2 回答
Mapply
绝对是可能的 . 这应该工作:我认为你遇到的问题是
mapply
采用向量或列表 . 在R矩阵中不是列表,但data.frame
是 . 您需要做的就是转置矩阵并转换为data.frame
然后mapply
应该工作 .data.frame
中的每一列都是列表中的一个元素,这就是我们必须转置它的原因(这样每个row
都将映射到向量中的每个元素) .由于有两个参数应该分别是矩阵/向量中的相应行和元素,我们可以循环遍历行序列,对数据进行子集化并应用函数
对于特定示例,可以使用
rowSums
进行矢量化