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

问题描述 投票:0回答:1

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

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"

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

我知道的两个解决方案都有问题。 首先,

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 vector assign names
1个回答
0
投票

只需使用双括号:

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

names(Zcoefs)
#[1] "lin"  "quad"
© www.soinside.com 2019 - 2024. All rights reserved.