【问题标题】:How to join two vectors' elements in a list and keep names according to origin vector?如何在列表中加入两个向量的元素并根据原向量保留名称?
【发布时间】:2018-02-16 18:40:06
【问题描述】:

我试图找到一种优雅的方式来链接函数参数和httr 的调用查询列表。假设我们有两个字符向量,分别表示动物和颜色

animals = "dog"
colors = "red"

如果我使用查询参数

list(animal=animals,color=colors)

它将产生预期的结果。另一方面,如果我想要一个组件的多个参数

animals = c("dog","cat")

同样的列表会创建

$animal
[1] "dog" "cat"

$color
[1] "red"

httr 需要类似的列表时

$animal
[1] "dog"

$animal
[1] "cat"

$color
[1] "red"

如何优雅地创建适当的列表,而不是将字符向量作为元素,而是创建多个具有相同名称的元素?

【问题讨论】:

    标签: r list


    【解决方案1】:

    试试:

    foo <- list(animals = c("dog","cat"), color = "red")
    foo <- as.list(unlist(foo))
    foo <- setNames(foo, gsub("[[:digit:]]", "", names(foo)))
    

    列表变得不那么有用了,因为按名称选择不起作用,但应该是您想要的格式。如果您的列表有数字,则重命名不是很好,但这可能需要您单独解决。

    更新:

    我不喜欢用正则表达式重命名。您也可以尝试这样的方法来删除最后一行:

    as.list(setNames(unlist(foo), rep(names(foo), sapply(foo, length))))
    

    使用setNamesgsub 更准确一些。

    【讨论】:

    • 这绝对比我之前的尝试好。
    • 哪个函数或参数需要这种格式的列表?
    • httr::GETquery参数需要这种格式的列表。
    【解决方案2】:
    c(animals=as.list(animals),colors=colors)
    $animals1
    [1] "dog"
    
    $animals2
    [1] "cat"
    
    $colors
    [1] "red"
    

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2021-11-24
      • 2014-04-17
      • 2021-05-13
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      相关资源
      最近更新 更多