需要帮助在函数中应用函数内的函数

时间:2015-07-08 17:50:07

标签: r

我的问题并不像听起来那么疯狂(希望如此)。我有一个函数,它将数据帧列表作为输入,并作为输出给出相应线性模型的列表。该函数的一个输入是参数log_transform。我希望用户能够输入要进行日志转换的变量列表,并由模型考虑。然而,这有点复杂,因为这不仅需要应用于多个变量,还需要应用于多个数据帧的多个变量。就像我这样编码:

function(df_list, log_transform = c("var1", "var2")) {
  if(!is.null(log_transform)) {               #"If someone inupts a list of variables to be transformed, then..."
    trans <- function(df) {
      sapply(log_transform, function(x) {     #"...apply a log transformation to each variable..."
        x <- log(x + 1)
      }, simplify = T)
    llply(df_list, trans)                     #"...for each dataframe in df_list."
  }
  etc
}

然而,当我尝试运行它时,我收到错误:

Error in x + 1 : non-numeric argument to binary operator

我哪里错了?

由于

1 个答案:

答案 0 :(得分:0)

没有提供测试用例,所以这仍未经过测试,但检查了语法完成情况并添加了右侧的curley-brace。您仍然需要在代码未执行的组件数据框中按名称引用列:

function(df_list, log_transform = c("var1", "var2")) {
  if(!is.null(log_transform)) 
        {       #"If someone inputs a list of variables to be transformed, then..."
        trans <- function(df) {
            df[[ log_transform]] <- sapply(log_transform, function(x) { 
                   #"...apply a log transformation to each variable..."
                                                           log(df[[x]] + 1)
                                                                    } )
    llply(df_list, trans)
                 #"...for each dataframe in df_list."
                                    }
  #etc
             }                                      }