簡體   English   中英

sample_n() 和 slice_sample() 之間的行為不一致

[英]Inconsistent behaviour between sample_n() and slice_sample()

在嘗試使用slice_sample()替換其前身sample_n()時,我遇到了一個簡單但棘手的問題map() function。

我正在嘗試復制一個示例^, mtcar數據集進行 1、2 和 3 行采樣。

使用sample_n()運行示例代碼:

map(c(1, 2, 3), sample_n, tbl = mtcars)

我得到:

[[1]]
          mpg cyl disp hp drat  wt  qsec vs am gear carb
Fiat 128 32.4   4 78.7 66 4.08 2.2 19.47  1  1    4    1

[[2]]
                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
Cadillac Fleetwood 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
Mazda RX4 Wag      21.0   6  160 110 3.90 2.875 17.02  0  1    4    4

[[3]]
               mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Merc 280      19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C     17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Toyota Corona 21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1

但是當我嘗試slice_sample() function 時:

map(c(1, 2, 3), slice_sample, .data = mtcars)

我得到:

Error in `map()`:
ℹ In index: 1.
Caused by error in `.f()`:
! `n` must be explicitly named.
ℹ Did you mean `slice_sample(n = 1)`?
Run `rlang::last_error()` to see where the error occurred.

sample_n() 和 sample_frac() 已被 slice_sample() 取代。
...這些功能被取代是因為我們意識到將兩個相互排斥的 arguments 轉換為一個 function 比使用兩個單獨的功能更方便。

我已經通讀了兩個幫助頁面並進行了一系列實驗,但沒有 go 走得太遠。 在我內心深處,我知道這絕對有可能 - 誰能給我一個提示?


^:第 217 頁,第 8 章,使用 R 超越電子表格:R 和 Rstudio 的初學者指南

這是因為

n必須明確命名。

slice_sample中,您必須指定nprop ,否則它會拋出錯誤,就像這里一樣。 在您的情況下,您可以使用匿名 function 來獲得預期的 output:

map(c(1, 2, 3), ~ slice_sample(n = .x, mtcars))

一般來說,使用匿名函數比...map函數中更合適。 正如purrr文檔中提到的,它可以避免混淆的情況:

我們還建議使用匿名 function,而不是將額外的 arguments 傳遞給 map。這避免了某個 class 的適度深奧的參數匹配問題,我們相信,通常更容易閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM