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


R purrr list_assign 修改列表


  • list_assign() 按名稱或位置修改列表的元素。

  • list_modify() 遞歸地修改列表的元素。

  • list_merge() 遞歸地合並列表的元素。

list_modify() 的靈感來自 utils::modifyList()

用法

list_assign(.x, ..., .is_node = NULL)

list_modify(.x, ..., .is_node = NULL)

list_merge(.x, ..., .is_node = NULL)

參數

.x

要修改的列表。

...

列表的新值。使用 zap() 刪除值。

這些值應該全部命名或全部未命名。當輸入全部命名時,它們按名稱與 .x 匹配。當它們都未命名時,它們按位置進行匹配。

支持Dynamic dots。特別是,如果您的替換值存儲在列表中,您可以將其與 !!! 拚接。

.is_node

一個謂詞函數,用於確定元素是節點(通過返回 TRUE )還是葉(通過返回 FALSE )。默認值 NULL 使用 vctrs::vec_is_list() 將簡單列表視為節點,將其他所有內容(包括 DataFrame 和線性模型等更豐富的對象)視為葉子。要遞歸到列表上構建的所有對象,請使用 is.list()

例子

x <- list(x = 1:10, y = 4, z = list(a = 1, b = 2))
str(x)
#> List of 3
#>  $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ y: num 4
#>  $ z:List of 2
#>   ..$ a: num 1
#>   ..$ b: num 2

# Update values
str(list_assign(x, a = 1))
#> List of 4
#>  $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ y: num 4
#>  $ z:List of 2
#>   ..$ a: num 1
#>   ..$ b: num 2
#>  $ a: num 1
# Replace values
str(list_assign(x, z = 5))
#> List of 3
#>  $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ y: num 4
#>  $ z: num 5
str(list_assign(x, z = NULL))
#> List of 3
#>  $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ y: num 4
#>  $ z: NULL

str(list_assign(x, z = list(a = 1:5)))
#> List of 3
#>  $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ y: num 4
#>  $ z:List of 1
#>   ..$ a: int [1:5] 1 2 3 4 5
# replace recursively, leaving the other elements of z alone
str(list_modify(x, z = list(a = 1:5)))
#> List of 3
#>  $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ y: num 4
#>  $ z:List of 2
#>   ..$ a: int [1:5] 1 2 3 4 5
#>   ..$ b: num 2

# Remove values
str(list_assign(x, z = zap()))
#> List of 2
#>  $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ y: num 4

# Combine values with list_merge()
str(list_merge(x, x = 11, z = list(a = 2:5, c = 3)))
#> List of 3
#>  $ x: num [1:11] 1 2 3 4 5 6 7 8 9 10 ...
#>  $ y: num 4
#>  $ z:List of 3
#>   ..$ a: num [1:5] 1 2 3 4 5
#>   ..$ b: num 2
#>   ..$ c: num 3

# All these functions support dynamic dots features. Use !!! to splice
# a list of arguments:
l <- list(new = 1, y = zap(), z = 5)
str(list_assign(x, !!!l))
#> List of 3
#>  $ x  : int [1:10] 1 2 3 4 5 6 7 8 9 10
#>  $ z  : num 5
#>  $ new: num 1
源代碼:R/list-modify.R

相關用法


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