我需要将一个用户函数应用于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个参数。如何获取列表中所有变量的结果?
答案 0 :(得分:1)
我认为你想要的是
lapply(factors, function(x) truncar(df, x))
这会针对truncar
中的每个因素调用df
上的factors
函数。