当我使用以前函数的输出创建向量时,我喜欢给出元素名称。 例如:
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']))
有人有更好的方法建议吗?
只需使用双括号:
Zcoefs=c(lin=coef(linMod)[['z']],quad=coef(quadMod)[['z']])
names(Zcoefs)
#[1] "lin" "quad"