r - 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
相反,我只是得到一个“非数字”的向量。所以问题是我在尝试中做错了什么。我看不出有什么不对,但我想这就是我现在在这里的原因。
解决方案
线
df[[i]] == TRUE
不会按预期工作,因为它正在测试列的每个值是否为 TRUE,并if/else
期望单个 TRUE/FALSE 作为输入,而不是长度 > 1 的逻辑向量。它将是
if(is.numeric(df[[i]]))
推荐阅读
- mysql - 在 MySql 中执行查询时与 sql mode=only_full_group_by 相关的错误
- oracle - 将 (B 列) 的值乘以常数后,将值添加到新列 (C 列)
- java - lambda主体中变量的实例化
- symfony - [Symfony3][Doctrine] 持久化实体时生成的查询问题
- javascript - 如何用 reactjs 改变动态输入的值?
- r - 调解分析中的“tcrossprod(MModel, mmat.t) 中的错误:不一致的论点”
- gradle - Gradle 无法解析符号
- c# - 如何使用 Visual C# 从 URL 读取 XML 数据
- angular - Angular AcitivatedRoute 未正确提取 queryParams
- html - 文本在缩放时转义 flex 容器