簡體   English   中英

將 lapply 與關鍵字參數一起使用

[英]Use lapply with keyword arguments

所以如果我沒有遺漏一些大的東西,那么 lapply/sapply/etc. 工作是使用列表中的可迭代元素作為第一個參數,因此強制您將其用作函數的位置參數( FUN )。

所以一個正常的用例是

foo <- function(a = NULL, b = NULL, c = NULL) {
  print(glue::glue("a: {a}"))
  print(glue::glue("b: {b}"))
  print(glue::glue("c: {c}"))
}

lapply(letters[1:3], foo)
#> a: a
#> 
#> 
#> a: b
#> 
#> 
#> a: c
#> [[1]]
#> 
#> 
#> [[2]]
#> 
#> 
#> [[3]]

但是,如果我想以 b 的形式遍歷列表,則必須將值設置為 a。 像這樣。

lapply(letters[1:3], foo, a = NULL)
#> 
#> b: a
#> 
#> 
#> b: b
#> 
#> 
#> b: c
#> [[1]]
#> 
#> 
#> [[2]]
#> 
#> 
#> [[3]]
lapply(letters[1:3], foo, a = NULL,b = NULL )
#> 
#> 
#> c: a
#> 
#> 
#> c: b
#> 
#> 
#> c: c
#> [[1]]
#> c: a
#> 
#> [[2]]
#> c: b
#> 
#> [[3]]
#> c: c

我知道我可以將它設置為默認值,但我想知道是否有辦法使用迭代元素作為關鍵字參數而不是位置參數。

它對於purrr::map系列也很方便,但purrr::map來,這樣的選項也不可用。

reprex 包(v0.3.0) 於 2019 年 12 月 24 日創建

只需定義一個新的匿名函數來將參數與名稱相關聯,例如

lapply(letters[1:3], function(x) foo(b = x))

如果您使用purrr ,則打字會少一些,但從概念上講,您正在做同樣的事情:

purrr::map(letters[1:3], ~ foo(b = .))

暫無
暫無

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

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