2009-07-09 127 views
46

我有兩個變量,keyvalue,我想將其添加爲一個鍵/值對列表:如何將變量鍵/值對添加到列表對象?

key = "width" 
value = 32 

mylist = list() 
mylist$key = value 

結果是這樣的:

mylist 
# $key 
# [1] 32 

但我想這取而代之:

mylist 
# $width 
# [1] 32 

我該怎麼做?

回答

57

R列表可以被認爲是可以按名稱訪問的對象的哈希向量。使用這種方法,可以將新條目添加到列表中,像這樣:

key <- "width" 
value <- 32 

mylist <- list() 
mylist[[ key ]] <- value 

在這裏,我們使用存儲在可變密鑰字符串來訪問列表中的位置就像使用存儲在循環變量i的值通過訪問一個向量:

vector[ i ] 

結果是:R中

myList 
$width 
[1] 32 
+2

謝謝!我還不太瞭解這個索引操作符。雖然這裏解釋了這個:http://cran.r-project.org/doc/manuals/R-lang.html#Indexing,你展示的用法沒有描述。有沒有任何在線文檔,這是正確描述? – Frank 2009-07-10 03:49:32

+0

如果這些值是基本類型(例如單個數字,字符等),則可以使用常規數組,例如:x < - c(1,4,2,5)。然後爲每個索引值分配名稱,如:names(x)< - c('a','b','c','d')。然後你可以將它們稱爲x ['a'],x ['b']等。 – JAponte 2016-10-18 02:39:33

13

列表元素可以被命名。所以你的情況只是做

> mylist = list() 
> mylist$width = value 

當R遇到這種代碼

> l$somename=something 

其中l是一個列表。它將一個元素添加到列表中,並將其命名爲somename。它是那麼可以通過使用

> l[["somename"]] 

> l$somename 

要訪問的名稱可以用命令的名稱改爲:

> names(l)[names(l)=="somename"] <- "othername" 

或者,如果你現在的元素在位置列表:

> names(l)[1] <- "someothername" 
7

setNames()內置函數可以很容易地從給定的鍵和值列表創建一個散列。 (感謝尼克K爲更好的建議。)

用法:hh <- setNames(as.list(values), keys)

實施例:

players <- c("bob", "tom", "tim", "tony", "tiny", "hubert", "herbert") 
rankings <- c(0.2027, 0.2187, 0.0378, 0.3334, 0.0161, 0.0555, 0.1357) 
league <- setNames(as.list(rankings), players) 

然後通過鍵訪問的值是容易的:

league$bob 
[1] 0.2027 
league$hubert 
[1] 0.0555