R-具有多于1个参数的lapply函数

时间:2015-12-07 03:37:04

标签: r function lapply

我需要将一个用户函数应用于data.frame的一部分。在之前的question中,我学会了使用lapply。我现在有一个需要2个参数的函数:

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错误(&#34; [[&#34;):参数&#34; x&#34;缺少,没有默认

我知道这可能是因为我的功能需要2个参数。如何获取列表中所有变量的结果?

1 个答案:

答案 0 :(得分:1)

我认为你想要的是

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

这会针对truncar中的每个因素调用df上的factors函数。