9

快速提问。为什么以下在 R 中起作用(正确地将变量值“Hello”分配给向量的第一个元素):

> a <- "Hello"
> b <- c(a, "There")
> b
[1] "Hello" "There"

这有效:

> c <- c("Hello"=1, "There"=2)
> c
Hello There 
    1     2 

但这不是(使向量元素名称等于“a”而不是“Hello”):

> c <- c(a=1, "There"=2)
> c
    a There 
    1     2 

是否可以让 R 认识到我想在语句中使用 a 的值c <- c(a=1, "There"=2)

4

2 回答 2

8

我不确定如何c()在内部从命名对象创建名称属性。也许它是沿着list()and的路线unlist()?无论如何,您可以先分配向量的值,然后再分配名称属性,如下所示。

a <- "Hello"
b <- c(1, 2)
names(b) = c(a, "There")
b
# Hello There 
#     1     2 

然后稍后访问命名元素:

b[a] <- 3
b
# Hello There 
#     3     2 
b["Hello"] <- 4
b
# Hello There 
#     4     2
b[1] <- 5
b
# Hello There 
#     5     2

编辑

如果您真的想在一行中完成所有操作,则可以使用以下方法:

eval(parse(text = paste0("c(",a," = 1, 'there' = 2)")))
# Hello there 
# 1     2 

但是,我认为您更喜欢将值和名称分别分配给该eval(parse())方法。

于 2012-05-18T14:49:18.083 回答
0

在命名列表中分配值。然后将其取消列出。例如

lR<-list("a" = 1, "那里" = 2)

v = unlist(lR)

这给出了一个命名向量 v

v

a There 
1     2 
于 2014-10-01T16:49:48.270 回答