我希望在向量名称中给出值。我知道该怎么做,但是在这种情况下,我有很多名称和许多值,都在列表中的向量中,并且通过自杀而手动打字。
此方法:
> values <- c('jessica' = 1, 'jones' = 2)
> values
jessica jones
1 2
显然有效。但是,此方法:
> names <- c('jessica', 'jones')
> values <- c(names[1] = 1, names[2] = 2)
Error: unexpected '=' in "values <- c(names[1] ="
好吧...我不明白为什么R拒绝将其读成纯字符以将其分配为名称。
我意识到我可以分别创建values
和names
,然后将names
分配为names(values)
,但同样,我的实际情况要复杂得多。但实际上我想知道为什么会出现这个特定问题。
编辑I:我拥有的实际数据是向量列表,每个列表都是不同量的成分组合,然后是成分名称的巨型矢量。我不能仅将名称向量设置为名称,因为需要手动放置单个名称。
编辑II:我的数据结构的示例。
ingredients <- c('ing1', 'ing2', 'ing3', 'ing4') # this vector is much longer in reality
amounts <- list(c('ing1' = 1, 'ing2' = 2, 'ing4' = 3),
c('ing2' = 2, 'ing3' = 3),
c('ing1' = 12, 'ing2' = 4, 'ing3' = 3),
c('ing1' = 1, 'ing2' = 1, 'ing3' = 2, 'ing4' = 5))
# this list too is much longer
我可以按照显示单独键入每个数字值的名称,但是还有更多的名称,因此我尝试输入:
之类的。c(ingredients[1] = 1, ingredients[2] = 2, ingredients[4] = 3)
但这引发了一个错误:
Error: unexpected '=' in "amounts <- list(c(ingredients[1] ="
我们可以使用 setNames
setNames(1:2, names)
另一个选项是deframe
,如果我们有两个列数据集
library(tibble)
tibble(names, val = 1:2) %>%
deframe