2

我想对引用 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))

但是,此代码不起作用,因为 data 是一个数据框,而不是一个向量,并且 lapply 似乎不能采用多个向量。我该如何进行这项工作?我对任何类型的解决方案持开放态度,但我必须能够引用多个变化的参数并调用预定义的函数。

4

4 回答 4

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
于 2013-07-16T20:12:44.467 回答
3

不需要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
于 2013-07-16T20:17:25.790 回答
1

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

myfunc <- function(x)){
    result <- x$var1*x$var2*x$var3
    return(result)
}
apply(data, 1, myfunc)
于 2013-07-16T20:12:28.967 回答
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

于 2017-07-17T15:21:20.467 回答