【问题标题】:R- function in lapply with more than 1 parameter具有多个参数的 lapply 中的 R-函数
【发布时间】:2015-12-07 03:37:03
【问题描述】:

我需要将用户函数应用于 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("[[") 中的错误:缺少参数 "x",没有默认值

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

【问题讨论】:

    标签: r function lapply


    【解决方案1】:

    我认为你想要的是

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 2020-02-18
      • 2013-08-02
      • 2016-05-02
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      相关资源
      最近更新 更多