在R中使用多个更改参数应用函数

时间:2013-07-16 20:00:17

标签: r function apply lapply

我想在R中的数据框中引用多个列的所有行上应用函数。例如,如果我有一个名为“data”的数据框,其中包含三个变量“var1”,“var2”和“ var3“我希望将函数应用于每一行:

myfunc <- function(var1, var2, var3)){
result <- var1*var2*var3
return(result)
}

然后伪代码将是:

apply(data, myfunc(data$var1, data$var2, data$var3))

但是,此代码不起作用,因为数据是数据框,而不是矢量,而lapply似乎不能使用多个矢量。我该如何工作?我对任何类型的解决方案持开放态度,但我必须能够引用多个更改的参数并调用预定义的函数。

4 个答案:

答案 0 :(得分:3)

你似乎相当接近,但你在电话中失踪了一点。

apply(data, 1, function(x,y,z) myfunc(data$var1,data$var2,data$var3))

似乎可以解决问题。

编辑:我在数据集上测试了这个

data<-data.frame(a=c(1,2,3),b=c(4,5,6),c=c(7,8,9))

并获得输出

[,1] [,2] [,3]
[1,]   28   28   28
[2,]   80   80   80
[3,]  162  162  162

答案 1 :(得分:2)

无需apply

#define function
myfunc <- function(var1, var2, var3){
  result <- var1*var2*var3
  return(result)
}
#dummy data
dat <- data.frame(A=c(1,2,3),B=c(4,5,6),C=c(7,8,9))

#test function
myfunc(dat$A,dat$B,dat$C)

#output
[1]  28  80 162

答案 2 :(得分:1)

这是一个未经测试的(没有提供可重现的示例)建议:

myfunc <- function(x)){
    result <- x$var1*x$var2*x$var3
    return(result)
}
apply(data, 1, myfunc)

答案 3 :(得分:0)

您还可以使用mapply

    myfnct<-function(x,y,z) {(x+y)*z}
    df<-data.frame('x'=1:5, 'y'=2:6, 'z'=3:7)
    mapply(myfnct, df$x, df$y, df$z)

同样,请在此处查看类似问题的答案:https://stackoverflow.com/a/4393444/8198984