提问人:Adam C Sales 提问时间:11/4/2023 更新时间:11/4/2023 访问量:43
在 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
问:
当我使用先前函数的输出创建向量时,我喜欢为元素命名。 例如:
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']))
有没有人对更好的方法有任何建议?
答:
3赞
Waldi
11/4/2023
#1
您可以使用双括号,这些双括号可以直接访问向量的元素,而无需其名称:[[]]
Zcoefs=c(lin=coef(linMod)[['z']],quad=coef(quadMod)[['z']])
names(Zcoefs)
#[1] "lin" "quad"
评论
Zcoefs=c(coef(linMod)['z'] |> set_names("lin"), coef(quadMod)['z'] |> set_names("quad"))
?