當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R purrr lmap 將函數應用於列表的列表元素


lmap()lmap_at()lmap_if()map()map_at()map_if() 類似,隻不過它們不是映射到 .x[[i]] ,而是映射到 .x[i]

這有幾個優點:

  • 它使得使用專門使用列表的函數成為可能。

  • 它允許 .f 訪問封裝列表的屬性,如 names()

  • 它允許 .f 返回比它接收到的更大或更小的列表,從而更改輸出的大小。

用法

lmap(.x, .f, ...)

lmap_if(.x, .p, .f, ..., .else = NULL)

lmap_at(.x, .at, .f, ...)

參數

.x

列表或 DataFrame 。

.f

一個函數,它接受一個長度為 1 的列表並返回一個列表(任意長度)。

...

傳遞給映射函數的附加參數。

我們現在通常建議不要使用 ... 將附加(常量)參數傳遞給 .f 。相反,使用簡寫匿名函數:

# Instead of
x |> map(f, 1, 2, collapse = ",")
# do:
x |> map(\(x) f(x, 1, 2, collapse = ","))

這使得更容易理解哪些參數屬於哪個函數,並且往往會產生更好的錯誤消息。

.p

單個謂詞函數、說明此類謂詞函數的公式或與 .x 長度相同的邏輯向量。或者,如果 .x 的元素本身是對象列表,則為指示內部列表中邏輯元素名稱的字符串。隻有.p 計算結果為TRUE 的元素才會被修改。

.else

應用於 .x 元素的函數,其中 .p 返回 FALSE

.at

給出要選擇的元素的邏輯向量、整數向量或字符向量。或者,函數接受名稱向量,並返回要選擇的元素的邏輯向量、整數向量或字符向量。

[Deprecated]:如果安裝了 tidyselect 軟件包,則可以使用vars()和 tidyselect 幫助器來選擇元素。

列表或 DataFrame ,匹配 .x 。對於長度沒有任何保證。

也可以看看

其他Map變體: imap()map2()map_depth()map_if()map()modify()pmap()

例子

set.seed(1014)

# Let's write a function that returns a larger list or an empty list
# depending on some condition. It also uses the input name to name the
# output
maybe_rep <- function(x) {
  n <- rpois(1, 2)
  set_names(rep_len(x, n), paste0(names(x), seq_len(n)))
}

# The output size varies each time we map f()
x <- list(a = 1:4, b = letters[5:7], c = 8:9, d = letters[10])
x |> lmap(maybe_rep) |> str()
#> List of 6
#>  $ b1: chr [1:3] "e" "f" "g"
#>  $ b2: chr [1:3] "e" "f" "g"
#>  $ b3: chr [1:3] "e" "f" "g"
#>  $ c1: int [1:2] 8 9
#>  $ c2: int [1:2] 8 9
#>  $ d1: chr "j"

# We can apply f() on a selected subset of x
x |> lmap_at(c("a", "d"), maybe_rep) |> str()
#> List of 4
#>  $ b : chr [1:3] "e" "f" "g"
#>  $ c : int [1:2] 8 9
#>  $ d1: chr "j"
#>  $ d2: chr "j"

# Or only where a condition is satisfied
x |> lmap_if(is.character, maybe_rep) |> str()
#> List of 5
#>  $ a : int [1:4] 1 2 3 4
#>  $ b1: chr [1:3] "e" "f" "g"
#>  $ b2: chr [1:3] "e" "f" "g"
#>  $ c : int [1:2] 8 9
#>  $ d1: chr "j"
源代碼:R/lmap.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Apply a function to list-elements of a list。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。