c()中的奇怪行为

时间:2015-05-31 14:13:08

标签: r

为什么我不能使用paste在c()中构造字符串?

c("SomeKey" = 123)

是好的并打印为:

SomeKey 
    123 

a1 <- "Some"
a2 <- "Key"
c(paste(a1, a2) = 123)

产生

Error: unexpected '=' in "    c(paste(a1, a2) ="

奇怪的是,我可以这样做:

key <- paste(a1, a2)
c(key = 123)

3 个答案:

答案 0 :(得分:6)

您正在寻找setNames,它返回具有指定名称和值的命名向量:

setNames(123, paste0(a1, a2))
# SomeKey 
#     123 
all.equal(setNames(123, paste0(a1, a2)), c("SomeKey" = 123))
# [1] TRUE

答案 1 :(得分:2)

因为paste()paste0()返回一个字符向量 - 它可以返回大于长度为1的向量。您正在尝试将矢量指定为单个对象的名称。为什么不在事后命名向量?

a = c(123,456)
names(a)=c(paste0("Some","Key"),paste0("Some","Other","Key"))
a
#> SomeKey SomeOtherKey 
       123          456 

答案 2 :(得分:0)

您可能正在寻找assign。您可能希望使用paste0,因为它不会在它粘贴的内容之间留出空格......或sep=""paste

> a1 <- "Some"
> a2 <- "Key"
> assign(paste(a1, a2), 123)
> ls()
[1] "a1"       "a2"       "Some Key"
> `Some Key`
[1] 123