-
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 purrr list_transpose 轉置列表
- R purrr list_simplify 將列表簡化為原子或 S3 向量
- R purrr list_flatten 壓平列表
- R purrr list_c 將列表元素組合成單個數據結構
- R purrr lmap 將函數應用於列表的列表元素
- R purrr accumulate 累積向量縮減的中間結果
- R purrr imap 將函數應用於向量的每個元素及其索引
- R purrr as_vector 將列表強製轉換為向量
- R purrr map_if 有條件地將函數應用於向量的每個元素
- R purrr map2 映射兩個輸入
- R purrr array-coercion 強製數組列出
- R purrr auto_browse 包裝一個函數,以便在出錯時自動 browser()
- R purrr pluck 安全地獲取或設置嵌套數據結構深處的元素
- R purrr insistently 將函數轉換為等待,然後在錯誤後重試
- R purrr map_depth 在給定深度映射/修改元素
- R purrr rerun 多次重新運行表達式
- R purrr quietly 包裝一個函數來捕獲副作用
- R purrr pmap 同時映射多個輸入(“並行”)
- R purrr possibly 包裝函數以返回值而不是錯誤
- R purrr head_while 查找全部滿足謂詞的頭/尾。
- R purrr rbernoulli 從伯努利分布生成隨機樣本
- R purrr rate-helpers 創建延遲率設置
- R purrr keep_at 根據元素的名稱/位置保留/丟棄元素
- R purrr keep 根據元素的值保留/丟棄元素
- R purrr transpose 轉置列表。
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Modify a list。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。