【问题标题】:How to add variable key/value pair to list object?如何将变量键/值对添加到列表对象?
【发布时间】:2010-11-09 11:47:49
【问题描述】:

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

key = "width"
value = 32

mylist = list()
mylist$key = value

结果是这样的:

mylist
# $key
# [1] 32

但我想要这个:

mylist
# $width
# [1] 32

我该怎么做?

【问题讨论】:

    标签: list r


    【解决方案1】:

    我们可以使用R的列表数据结构,以键值对的形式存储数据。

    语法:

    ObjectName<-list("key"= value)

    例子:

    mylist<-list("width"=32)

    另外,参考示例:"https://github.com/WinVector/zmPDSwR/blob/master/Statlog/GCDSteps.R"

    【讨论】:

      【解决方案2】:

      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)
      

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

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

      【讨论】:

        【解决方案3】:

        R 列表可以被认为是可以通过名称访问的对象的散列向量。使用这种方法,您可以向列表中添加一个新条目,如下所示:

        key <- "width"
        value <- 32
        
        mylist <- list()
        mylist[[ key ]] <- value
        

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

        vector[ i ]
        

        结果是:

        myList
        $width
        [1] 32
        

        【讨论】:

        • 谢谢!我还不太了解这个索引运算符。虽然这里解释了:cran.r-project.org/doc/manuals/R-lang.html#Indexing,但没有描述你展示的用法。有没有正确描述的在线文档?
        • 如果值是基本类型(例如单个数字、字符等),您可以使用常规数组,例如:x
        【解决方案4】:

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

         > 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"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-13
          • 1970-01-01
          • 2013-08-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多