在 R 应用中合并外部函数



给定此数据。帧

  x y z
1 1 3 5
2 2 4 6

对于dat中的每一行,我想将xz列的值加上系数10。预期结果是这个

  x y z result
1 1 3 5 16      #(1+5+10)
2 2 4 6 18      #(2+6+10)

但是为什么这个代码没有产生想要的结果呢?

 dat <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
 Coeff <- 10
 # Function
 process.xz <- function(v1,v2,cf) {
    return(v1+v2+cf)
 }
# It breaks here
sm <- apply(dat[,c('x','z')], 1, process.xz(dat$x,dat$y,Coeff ))
# Later I'd do this:
# cbind(dat,sm);

我不会在这里使用apply。由于加法+算子是矢量化的,因此可以使用获得和

> process.xz(dat$x, dat$z, Coeff)
[1] 16 18

要在data.frame中写入此内容,请不要使用cbind,只需直接分配:

dat$result <- process.xz(dat$x, dat$z, Coeff)

它失败的原因是apply不能像那样工作——您必须传递函数的名称和任何其他参数。然后将数据帧的行作为第一个参数(作为单个向量)传递给名为的函数。

 dat <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
 Coeff <- 10
 # Function
 process.xz <- function(x,cf) {
    return(x[1]+x[2]+cf)
 }
sm <- apply(dat[,c('x','z')], 1, process.xz,cf=Coeff)

我完全同意在这里使用apply没有意义,但无论如何,理解它都很好。

最新更新