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


R unlist 展平列表


R語言 unlist 位於 base 包(package)。

說明

給定一個列表結構 xunlist 簡化它以生成一個向量,其中包含 x 中出現的所有原子組件。

用法

 unlist(x, recursive = TRUE, use.names = TRUE)
.unlist(x, recursive = TRUE, use.names = TRUE)

參數

x

一個R對象,通常是列表或向量。

recursive

合乎邏輯的。是否應該取消列出 x 的列表組件?

use.names

合乎邏輯的。名字應該被保留嗎?

細節

unlist 是通用的:您可以編寫方法來處理特定類的對象,請參閱 InternalMethods 並注意,例如,relistrelistable 對象的 unlist 方法。

如果是 recursive = FALSE ,則該函數不會遞歸超出 x 中的第一級項目。

因子經過特殊處理。如果 x 的所有非列表元素都是 factor(或有序因子)對象,則結果將是一個因子,其級別是元素級別集的並集,按照級別在級別集中出現的順序元素(這意味著如果所有元素具有相同的水平集,即結果的水平集)。

.unlist() 是內部版本的接口,沒有對因子進行這種特殊處理。

x 可以是原子向量,但 unlist 沒有任何用處,甚至不刪除名稱。

默認情況下, unlist 嘗試保留 x 中存在的命名信息。如果use.names = FALSE,所有命名信息都會被刪除。

在可能的情況下,列表元素在取消列出期間被強製為通用模式,因此結果通常最終作為字符向量。向量將被強製為層次結構中組件的最高類型 NULL < raw <邏輯< 整數 < 雙 < 複雜 < 字符 < 列表 < 表達式:pairlists 被視為列表。

列表是一個(通用)向量,簡化後的向量可能仍然是一個列表(並且可能保持不變)。列表的非向量元素(例如名稱、公式和調用等語言元素)不會被強製,因此包含其中一個或多個的列表仍然是列表。 (取消列出 lm 擬合的效果是一個以單獨殘差作為組件的列表。)請注意,unlist(x) 現在對於非向量 x 也返回不變的 x,而不是在這種情況下發出錯誤信號。

NULL 或用於保存列表組件的適當模式的表達式或向量。

在將pairlists強製轉換為列表之後,輸出類型由層次結構中組件的最高類型確定:NULL < raw <邏輯<整數<雙精度<複雜<字符<列表<表達式。

例子

uop <- unlist(op <- options())
length(uop) > length(op) # *atomic* vectors are still split into parts
uop2 <- unlist(op, recursive = FALSE)

l.ex <- list(a = list(1:5, LETTERS[1:5]), b = "Z", c = NA)
unlist(l.ex, recursive = FALSE) # 'a' is still split ..
unlist(l.ex, recursive = TRUE)

l1 <- list(a = "a", b = 2, c = pi+2i)
unlist(l1) # a character vector
l2 <- list(a = "a", b = as.name("b"), c = pi+2i)
unlist(l2) # remains a list

ll <- list(as.name("sinc"), quote( a + b ), 1:10, letters, expression(1+x))
utils::str(ll)
for(x in ll)
  stopifnot(identical(x, unlist(x)))

參考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

cas.listrelist

相關用法


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