簡體   English   中英

從兩個向量(名稱、值)創建命名列表

[英]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`

這似乎是一個相當人為的解決方案,但我不知道如何去做。 我遇到的問題是:

  1. 它需要創建dummyList即使dummyList從未更改並且在調用mapply之后是一個空列表。

  2. 如果數字向量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.

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