use*_*617 5 r vector matrix apply
假设我想将函数应用于矩阵的每一行.函数的一个参数采用向量.我想将向量的第一个元素应用于第一行,将第二个元素应用于第二行,等等.
例如:
set.seed(123)
df<-matrix(runif(100), ncol=10)
var2 <- c(1:10)
MYFUNC <- function(x, Var=NA){
sum(x)/Var
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:
apply(df, 1, function(x) MYFUNC(x, Var=var2))
Run Code Online (Sandbox Code Playgroud)
但这给了我一个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
Run Code Online (Sandbox Code Playgroud)
我认为你遇到的问题是mapply需要矢量或列表.在R矩阵中不是列表,而是data.frames.您需要做的就是转置矩阵并转换为a data.frame然后mapply应该工作.a中的每一列data.frame都是列表中的一个元素,这就是我们必须转置它的原因(这样每个列row都将映射到向量中的每个元素).