在 R 中:将向量的元素命名为,例如 c(name1=x1,name2=x2),而不干扰元素的先前名称

In R: Naming elements of a vector as, e.g., c(name1=x1,name2=x2) without elements' prior names interfering

提问人:Adam C Sales 提问时间:11/4/2023 更新时间:11/4/2023 访问量:43

问:

当我使用先前函数的输出创建向量时,我喜欢为元素命名。 例如:

x=rnorm(100)
z=sample(c(0,1),100,replace=TRUE)
y=.5*x+.5*x^2+z+rnorm(100)

linMod=lm(y~x+z)
quadMod=lm(y~poly(x,2)+z)

Zcoefs=c(lin=coef(linMod)['z'],quad=coef(quadMod)['z'])

我想要的是这个:

> names(Zcoefs)
[1] "lin"  "quad"

但我得到的是这样的:

> names(Zcoefs)
[1] "lin.z"  "quad.z"

使用从 的输出中继承的“.z”。coef()

我所知道的两种解决方案都有问题。 第一:setNames()

Zcoefs=setNames(c(coef(linMod)['z'],coef(quadMod)['z']),c('lin','quad'))

问题是,为了做到这一点,你需要跟踪(在你的脑海中!)向量中对象的顺序和名称的顺序,这似乎很容易引起错误。

另一种解决方案使用 ,它非常笨拙:unname()

Zcoefs=c(lin=unname(coef(linMod)['z']),quad=unname(coef(quadMod)['z']))

有没有人对更好的方法有任何建议?

R 向量 分配 名称

评论

0赞 Jon Spring 11/4/2023
Zcoefs=c(coef(linMod)['z'] |> set_names("lin"), coef(quadMod)['z'] |> set_names("quad"))?

答:

3赞 Waldi 11/4/2023 #1

您可以使用双括号,这些双括号可以直接访问向量的元素,而无需其名称:[[]]

Zcoefs=c(lin=coef(linMod)[['z']],quad=coef(quadMod)[['z']])

names(Zcoefs)
#[1] "lin"  "quad"