在使用 haven::read_sas 读取数据后使用 dplyr 中的 pull() 保留属性。如何避免?
Using pull() from dplyr after reading data with haven::read_sas keeps attributes. How to avoid?
我正在处理最初作为 .sas7bdat
文件提供的几个数据集。
最初,我使用 sas7bdat
包加载所有文件,但现在我确信 haven
包可以做得更好更快。
但是,当使用 dplyr
:
中的 pull()
时,使用 haven::read_(sas)
新加载的数据似乎与 sas7bdat::read.sas7bdat()
的行为不同
library("haven")
library("dplyr")
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library("sas7bdat")
data.sas7 <- sas7bdat::read.sas7bdat(system.file("examples", "iris.sas7bdat", package = "haven"))
data.sas7 %>% summarise(mean = mean(Petal_Length)) %>% pull
#> [1] 3.758
data.haven <- haven::read_sas(system.file("examples", "iris.sas7bdat", package = "haven"))
data.haven %>% summarise(mean = mean(Petal_Length)) %>% pull
#> [1] 3.758
#> attr(,"format.sas")
#> [1] "BEST"
由 reprex package (v0.2.1)
于 2019-01-31 创建
从上面的示例中可以看出,当使用 haven
加载数据时,也会打印 attr()
。例如,当我想要在 rmarkdown
.
中打印结果时,这并不实用
我的问题是:当使用 haven
加载数据时,如何避免在使用 pull()
表单 dplyr
时打印属性?
首先让我们重现类似的数据:
iris2 <- iris
attr(iris2$Petal.Length,"format.sas") <- "BEST"
iris2 %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758
# attr(,"format.sas")
# [1] "BEST"
然后看我在这里使用的第一行,它去掉了所有列的属性 "format.sas"
:
iris2 %>%
mutate_all(`attr<-`,"format.sas", NULL) %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758
如果要删除所有属性:
iris2 %>%
mutate_all(`attributes<-`, NULL) %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758
我正在处理最初作为 .sas7bdat
文件提供的几个数据集。
最初,我使用 sas7bdat
包加载所有文件,但现在我确信 haven
包可以做得更好更快。
但是,当使用 dplyr
:
pull()
时,使用 haven::read_(sas)
新加载的数据似乎与 sas7bdat::read.sas7bdat()
的行为不同
library("haven")
library("dplyr")
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library("sas7bdat")
data.sas7 <- sas7bdat::read.sas7bdat(system.file("examples", "iris.sas7bdat", package = "haven"))
data.sas7 %>% summarise(mean = mean(Petal_Length)) %>% pull
#> [1] 3.758
data.haven <- haven::read_sas(system.file("examples", "iris.sas7bdat", package = "haven"))
data.haven %>% summarise(mean = mean(Petal_Length)) %>% pull
#> [1] 3.758
#> attr(,"format.sas")
#> [1] "BEST"
由 reprex package (v0.2.1)
于 2019-01-31 创建从上面的示例中可以看出,当使用 haven
加载数据时,也会打印 attr()
。例如,当我想要在 rmarkdown
.
我的问题是:当使用 haven
加载数据时,如何避免在使用 pull()
表单 dplyr
时打印属性?
首先让我们重现类似的数据:
iris2 <- iris
attr(iris2$Petal.Length,"format.sas") <- "BEST"
iris2 %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758
# attr(,"format.sas")
# [1] "BEST"
然后看我在这里使用的第一行,它去掉了所有列的属性 "format.sas"
:
iris2 %>%
mutate_all(`attr<-`,"format.sas", NULL) %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758
如果要删除所有属性:
iris2 %>%
mutate_all(`attributes<-`, NULL) %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758