如何加入两个向量'列表中的元素并根据原始向量保留名称?

时间:2018-02-16 18:40:06

标签: r list

我试图找到一种优雅的方式来链接功能参数和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"

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

2 个答案:

答案 0 :(得分:2)

尝试:

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确切一点。

答案 1 :(得分:0)

c(animals=as.list(animals),colors=colors)
$animals1
[1] "dog"

$animals2
[1] "cat"

$colors
[1] "red"