在R中应用外部函数

时间:2013-08-23 03:40:30

标签: r function apply

鉴于此data.frame

  x y z
1 1 3 5
2 2 4 6

我想为dat中的每一行添加列 x z 的值加上系数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);

2 个答案:

答案 0 :(得分:4)

我不会在这里使用apply。由于添加+运算符已向量化,因此您可以使用

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

要在data.frame中写下此内容,请勿使用cbind,只需直接指定:

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

答案 1 :(得分:4)

失败的原因是因为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)

我完全同意在这里使用申请没有意义 - 但无论如何都要理解。