如何将变量键/值对添加到列表对象?

Fra*_*ank 51 r list

我有两个变量,key并且value,我想将它们作为键/值对添加到列表中:

key = "width"
value = 32

mylist = list()
mylist$key = value
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

mylist
# $key
# [1] 32
Run Code Online (Sandbox Code Playgroud)

但我想这样做:

mylist
# $width
# [1] 32
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Sha*_*pie 68

R列表可以被认为是可以通过名称访问的对象的哈希向量.使用此方法,您可以向列表添加新条目,如下所示:

key <- "width"
value <- 32

mylist <- list()
mylist[[ key ]] <- value
Run Code Online (Sandbox Code Playgroud)

这里我们使用存储在变量键中的字符串来访问列表中的位置,就像使用存储在循环变量i中的值来访问向量一样:

vector[ i ]
Run Code Online (Sandbox Code Playgroud)

结果是:

myList
$width
[1] 32
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我还没有真正理解这个索引操作符.虽然这里解释了:http://cran.r-project.org/doc/manuals/R-lang.html#Indexing,但没有描述您显示的用法.是否有正确描述的在线文档? (3认同)

Ass*_*him 15

setNames()内置功能可以很容易地创建一个从给定的密钥和值列表的散列. (感谢Nick 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)
Run Code Online (Sandbox Code Playgroud)

然后通过键访问值很容易:

league$bob
 [1] 0.2027
league$hubert
 [1] 0.0555
Run Code Online (Sandbox Code Playgroud)

  • `league2 < - setNames(as.list(排名),玩家)`大约快4.5倍,并且因为它使用了矢量化函数,所以它将是一种更"R"的方式.(演示`microbenchmark :: microbenchmark(联盟< - as.hash(球员,排名),league2 < - setNames(as.list(排名),球员),次数= 1000)`) (2认同)

mpi*_*tas 13

可以命名R中的列表元素.所以在你的情况下就这样做

 > mylist = list()
 > mylist$width = value
Run Code Online (Sandbox Code Playgroud)

当R遇到这个代码时

> l$somename=something
Run Code Online (Sandbox Code Playgroud)

其中l是一个列表.它将一个元素附加到列表中,并将其命名为somename.然后可以使用它来访问它

> l[["somename"]]
Run Code Online (Sandbox Code Playgroud)

要么

> l$somename
Run Code Online (Sandbox Code Playgroud)

可以使用命令名称更改名称:

> names(l)[names(l)=="somename"] <- "othername"
Run Code Online (Sandbox Code Playgroud)

或者,如果您现在通过以下列表中元素的位置:

> names(l)[1] <- "someothername"
Run Code Online (Sandbox Code Playgroud)