繁体   English   中英

从R中给定函数的向量调用函数

[英]call a function from a vector of given functions in R

具有以下功能:

setTypes <- function(df2, ...) {
    fns <- as.list(substitute(list(...)))
    for(i in 1:length(df2)) {
        if(fns[i] == '') {
            next
        }
        df2[i,] <- fns[i](df2[i,])
    }
    return(df2)
}

想要这样做:

test<-setTypes(sls,c('','as.Date','','','as.numeric','as.numeric'))

想法是更改数据帧中字段的类型,而不必对每个字段执行sls$field <- as.numeric(sls$field)

我写了这样的函数,可以正常工作:

fn <- function(t) {
    return(t("55.55000"))
}

输出是这样的:

> fn(as.numeric)
[1] 55.55

但是,我不知道为什么将可变长度参数作为列表并将其称为list[index](input)无效。 甚至传递函数c(as.Date, as.numeric, as.character)类的向量并执行c[1]('2015-10-10') # as.Date('2015-10-10')

我收到错误消息“尝试应用非功能”。我也尝试使用call但无济于事。 救命?

问题是class(c[1])是一个列表,使用c[[1]]代替

范例程式码

v <- c(as.numeric,as.character)
v[[1]]("1")
v[[2]](1)

编辑您的示例应为:

setTypes <- function(df2, ...) {
  fns <- list(...)
  for(i in 1:NCOL(df2)) {
    if(is.function(fns[[i]])) {
      df2[,i] <- fns[[i]](df2[,i])
    }
  }
  return(df2)
}

df <- data.frame(v1 = c(1,2), v2 = c("1","2"))
setTypes(df,as.character,'',as.numeric)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM