lapply 中的 R- 函数具有超过 1 个参数

R- function in lapply with more than 1 parameter

我需要将用户函数应用于 data.frame 的一部分。在之前的 中,我学会了为此使用 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)}

此代码有效。例如 table 可能是:

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)

Error in NextMethod("[[") : argument "x" is missing, with no default

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

我想你想要的是

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

这会为 factors 中的每个因子调用 df 上的 truncar 函数。