[英]Creating a named list from two vectors (names, values)
有沒有辦法在兩個向量上使用 mapply 來構造命名列表? 第一個向量將是character
類型並包含用於列表的名稱,而第二個包含值。
到目前為止,我唯一的解決方案是:
> dummyList = list()
> addToList <- function(name, value) {
+ dummyList[[name]] <- value
+ }
> mapply(addToList, c("foo", "bar"), as.list(c(1, 2))
$foo
`1`
$bar
`2`
這似乎是一個相當人為的解決方案,但我不知道如何去做。 我遇到的問題是:
它需要創建dummyList
即使dummyList
從未更改並且在調用mapply
之后是一個空列表。
如果數字向量c(1, 2)
未轉換為列表,則調用mapply
的結果是雙精度命名向量。
為了解決問題 2,我總是可以在兩個向量上調用mapply
,然后在結果上調用as.list
,但似乎應該有一種方法可以直接創建一個列表,其中的值位於向量中。
您可以使用setNames()
setNames(as.list(c(1, 2)), c("foo", "bar"))
(對於列表)或
setNames(c(1, 2), c("foo", "bar"))
(對於向量)
我和 Ben 一樣對您為什么要這樣做感到困惑,以及他的建議。
出於好奇, mapply
中有一種“隱藏”功能可以實現:
x <- letters[1:2]
y <- 1:2
mapply(function(x,y) { y }, x, y, SIMPLIFY = FALSE,USE.NAMES = TRUE)
$a
[1] 1
$b
[1] 2
請注意USE.NAMES
的文檔說:
USE.NAMES 邏輯; 如果第一個 ... 參數有名稱,則使用名稱,或者如果它是字符向量,則使用該字符向量作為名稱。
我的建議是分兩步完成的,而且很簡單,所以也許更容易理解:
test_list <- list(1, 2)
names(test_list) <- c("foo", "bar")
@ben-bolker 提出的建議有效,但只是想分享一個替代方案,以防萬一。
快樂編碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.