我写了一个名为errors
的小R包,它将错误与数字向量相关联,并启用透明错误传播。我正努力使其与dplyr
完全兼容。
首先,让我们采用众所周知的iris
数据集,并为每个数值变量分配5%的误差:
library(errors)
library(dplyr)
iris_errors <- iris %>%
mutate_at(vars(-Species), funs(set_errors(., .*0.05)))
head(iris_errors) # ok
每列都是errors
S3对象,包含150个值及其相关的150个错误:
length(iris_errors$Sepal.Length) # 150
length(errors(iris_errors$Sepal.Length)) # 150
现在,假设我们想要按物种分列每列的平均值:
iris_mean <- iris_errors %>%
group_by(Species) %>%
summarise_all(mean)
head(iris_mean) # error
显然,它有效,但格式化程序在我们尝试打印时失败了。发生的事情是,在某些时候,我们失去了所有的错误,但第一个错误:
length(iris_mean$Sepal.Length) # 3
length(errors(iris_mean$Sepal.Length)) # 1!
答案 0 :(得分:1)
似乎使用dplyr
中的属性并不是一个微不足道的问题(请参阅tidyverse/dplyr#2773)。他们有计划,但暂时不会工作。
这是我尝试使用dplyr
进行的分组摘要的纯R版本:
by(iris_errors, iris_errors$Species, function(i) {
i$Species <- NULL
lapply(i, mean)
})