2015-12-07 93 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功能。

相关问题