首页 > 解决方案 > R中简单列汇总函数的代码审查

问题描述

我正在研究R for Data Science,而我正在研究的问题是要求将已经制作的函数仅适用于数字列。

原函数如下:

   out <- vector("double", length(df))
   for (i in seq_along(df)) {
        out[i] <- fun(df[[i]])
       
        out[i] = "Not Numeric"
     }
   out
} 

修改后的函数如下:

    out <- vector("double", length(df))
    for (i in seq_along(df)) {
        if (is.numeric(df[[i]] == TRUE)){
        out[i] <- fun(df[[i]])
        } else{
            out[i] = "Not Numeric"
        }
    }
    out
}

我正在对以下数据框进行测试:

    a = rnorm(10),
    b = rnorm(10),
    c = rnorm(10),
    d = letters[1:10],
    e = LETTERS[11:20],
    f = runif(10)
)

所以这个函数应该工作的方式是说我想计算列的平均值。然后我会继续输入:col_summary(df,mean)输出应该是: mean_1 mean_2 mean_3 "Not Numeric" "Not Numeric" mean_4

相反,我只是得到一个“非数字”的向量。所以问题是我在尝试中做错了什么。我看不出有什么不对,但我想这就是我现在在这里的原因。

标签: rdataframefor-loopif-statement

解决方案


线

df[[i]] == TRUE

不会按预期工作,因为它正在测试列的每个值是否为 TRUE,并if/else期望单个 TRUE/FALSE 作为输入,而不是长度 > 1 的逻辑向量。它将是

if(is.numeric(df[[i]]))

推荐阅读