How do I extract just the number from a named number (without the name)?
Asked Answered
U

4

119

I am looking for just the value of the B1(newx) linear model coefficient, not the name. I just want the 0.5 value. I do not want the name "newx".

newx <- c(0.5,1.5,2.5)

newy <- c(2,3,4)

out <- lm(newy ~ newx)

out looks like:

Call:
lm(formula = newy ~ newx)

Coefficients:
(Intercept)         newx  
       1.5         1.0  

I arrived here. But now I am stuck.

out$coefficients["newx"]

newx 
 
1.0 
Undertone answered 1/4, 2013 at 2:5 Comment(3)
as.numeric(out$coefficients["newx"])Hershelhershell
as.numeric is does work. Maybe it is a low cost way to force out a number?Undertone
You can use the index number of newx (2) instead of the name like out[[1]][[2]].Spinneret
B
153

For a single element like this, use [[ rather than [. Compare:

coefficients(out)["newx"]
# newx 
#    1 

coefficients(out)[["newx"]]
# [1] 1

More generally, use unname():

unname(coefficients(out)[c("newx", "(Intercept)")])
# [1] 1.0 1.5

head(unname(mtcars))
#                     NA NA  NA  NA   NA    NA    NA NA NA NA NA
# Mazda RX4         21.0  6 160 110 3.90 2.620 16.46  0  1  4  4
# Mazda RX4 Wag     21.0  6 160 110 3.90 2.875 17.02  0  1  4  4
# Datsun 710        22.8  4 108  93 3.85 2.320 18.61  1  1  4  1
# Hornet 4 Drive    21.4  6 258 110 3.08 3.215 19.44  1  0  3  1
# Hornet Sportabout 18.7  8 360 175 3.15 3.440 17.02  0  0  3  2
# Valiant           18.1  6 225 105 2.76 3.460 20.22  1  0  3  1

## etc.
Bobette answered 1/4, 2013 at 2:9 Comment(0)
Y
10

If the question is about removing names, another way is here

my_vec <- # some quantile function(returns named vector)
names(my_vec) <- NULL
my_vec
## [1] 1 2 3
Yonina answered 1/2, 2020 at 12:47 Comment(0)
C
2

An easy and rather direct way to do it is

as.numeric(out$coefficients["newx"])
Cotemporary answered 23/7, 2021 at 7:49 Comment(0)
G
0

Another way would be to use broom package:

broom::tidy(out)$estimate[1]
#1.5
Grobe answered 3/10, 2020 at 18:56 Comment(1)
A bit overkill, isn't it? Could you please shed some light on why this solution is more elegant/efficient than the accepted answer? I am asking from my utmost honest ignorance and not with a pedantic motif.Aeciospore

© 2022 - 2024 — McMap. All rights reserved.