2015-12-07 120 views
0

我需要將用戶函數應用於data.frame的一部分。在之前的question我學會了使用lapply。我現在有一個需要2個參數的功能:帶有多於一個參數的lapply中的R函數

truncar<-function(tbl, x){if(class(tbl[[x]])=='factor') { 
    tbl[,x]=as.character(tbl[[x]]) 
    tbl[tbl[,x]=='**',x]<-0     
    tbl[,x]=as.numeric(tbl[[x]])} 
    tbl[is.na(tbl[,x]),x]<-0 
    y=ifelse(tbl[,x]>0,1,0) 
    return(y)} 

此代碼有效。一個例子表可能是:

df <- data.frame(A=c(-3:6, '**'), B=-1:9, C=c(-2:7,NA), D=factor(-3:7)) 

如果我把它應用到每次一列中,我得到了想要的結果:

> truncar(df, 'A') 
[1] 0 0 0 0 1 1 1 1 1 1 0 

但是,如果我嘗試用lapply我很多變數做到這一點收到一條錯誤消息:

factors<-c('A', 'B', 'C') 
lapply(df[,factors], truncar) 

錯誤NextMethod( 「[[」):參數 「X」 的缺失,沒有默認設置

據我所知,這可能是由於我的功能需要2個參數。我如何獲得列表中所有變量的結果?

回答

1

我認爲,你想要的是

lapply(factors, function(x) truncar(df, x)) 

這就要求在factors各因素對dftruncar功能。

相關問題