[英]Incorporating external function in R's 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);
我不會在這里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)
我完全同意在這里使用申請沒有意義 - 但無論如何都要理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.