簡體   English   中英

在R中應用外部函數

[英]Incorporating external function in R's apply

鑒於此data.frame

  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)

我完全同意在這里使用申請沒有意義 - 但無論如何都要理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM