【发布时间】:2021-08-26 18:25:17
【问题描述】:
我刚刚注意到read_csv() 以某种方式使用了出乎意料的随机数(至少对我而言)。相应的基本 R 函数 read.csv() 不这样做。那么,read_csv() 使用随机数做什么呢?我查看了文档,但找不到明确的答案。随机数是否与guess_max 参数有关?
library(tidyverse)
set.seed(123)
rnorm(1)
# [1] -0.5604756
set.seed(123)
dat <- read.csv("data/titanic.csv")
rnorm(1)
# [1] -0.5604756
set.seed(123)
dat <- read_csv("data/titanic.csv")
rnorm(1)
#[1] 1.239496
编辑:
- 正如 rawr 的评论所建议的,我尝试指定
col_types并且确实有效。但我仍然想知道为什么会这样。有人解释一下吗?
set.seed(123)
dat <- read_csv("data/titanic.csv", col_types = c("dddccdddcdcc"))
rnorm(1)
#[1] -0.5604756
- 由于很多人询问 R 和
readr版本,这里是我的会话信息。
library(readr)
sessioninfo::session_info()
#> - Session info ---------------------------------------------------------------
#> setting value
#> version R version 4.0.5 (2021-03-31)
#> os Windows 10 x64
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> collate German_Germany.1252
#> ctype German_Germany.1252
#> tz Europe/Berlin
#> date 2021-06-10
#>
#> - Packages -------------------------------------------------------------------
#> package * version date lib source
#> cli 2.5.0 2021-04-26 [1] CRAN (R 4.0.3)
#> crayon 1.4.1 2021-02-08 [1] CRAN (R 4.0.4)
#> digest 0.6.27 2020-10-24 [1] CRAN (R 4.0.3)
#> ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.0.3)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.3)
#> fansi 0.5.0 2021-05-25 [1] CRAN (R 4.0.5)
#> fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.0.5)
#> fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.3)
#> glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.3)
#> highr 0.9 2021-04-16 [1] CRAN (R 4.0.5)
#> hms 1.0.0 2021-01-13 [1] CRAN (R 4.0.5)
#> htmltools 0.5.1.9003 2021-05-07 [1] Github (rstudio/htmltools@e12171e)
#> knitr 1.33 2021-04-24 [1] CRAN (R 4.0.5)
#> lifecycle 1.0.0 2021-02-15 [1] CRAN (R 4.0.4)
#> magrittr 2.0.1 2020-11-17 [1] CRAN (R 4.0.3)
#> pillar 1.6.1 2021-05-16 [1] CRAN (R 4.0.5)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.3)
#> ps 1.6.0 2021-02-28 [1] CRAN (R 4.0.5)
#> R6 2.5.0 2020-10-28 [1] CRAN (R 4.0.3)
#> readr * 1.4.0 2020-10-05 [1] CRAN (R 4.0.5)
#> reprex 2.0.0 2021-04-02 [1] CRAN (R 4.0.5)
#> rlang 0.4.11.9000 2021-05-29 [1] Github (r-lib/rlang@7797cdf)
#> rmarkdown 2.8.1 2021-05-07 [1] Github (rstudio/rmarkdown@e98207f)
#> rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.0.3)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.3)
#> stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.3)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.3)
#> tibble 3.1.2 2021-05-16 [1] CRAN (R 4.0.5)
#> utf8 1.2.1 2021-03-12 [1] CRAN (R 4.0.3)
#> vctrs 0.3.8 2021-04-29 [1] CRAN (R 4.0.3)
#> withr 2.4.2 2021-04-18 [1] CRAN (R 4.0.5)
#> xfun 0.22 2021-03-11 [1] CRAN (R 4.0.5)
#> yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.3)
#>
#> [1] C:/Users/Albert/Documents/R/win-library/4.0
#> [2] C:/Program Files/R/R-4.0.5/library
由reprex package (v2.0.0) 于 2021-06-10 创建
【问题讨论】:
-
函数
read_csv()没有“使用”随机种子。该函数读取文件名提供的文件。但是,您是对的,它破坏了种子的适用性。只需读入数据,然后设置种子。然后您的rnorm()将按预期工作。 -
什么版本的 R?使用 R-4.0.3,我在
read.csv和readr::read_csv之后得到-0.56。 (使用readr-1.3.1。) -
很想知道
packageVersion("read_csv")... -
当我指定
col_types时,我得到-0.5604756的预期 -
@rawr,当 not 使用
col_types时,您是否获得了备用值?包版本? @r2evans,您是否阅读了titanic数据集或其他数据集的副本? (我稍微浏览了一下代码,寻找对sample()或其他使用 RNG 的东西的调用,没有任何东西跳出来)