Làm cách nào để trích xuất số từ một số được đặt tên (không có tên)?


84

Tôi chỉ đang tìm kiếm giá trị của hệ số mô hình tuyến tính B1 (newx), không phải tên. Tôi chỉ muốn giá trị 0,5. Tôi không muốn tên "newx".

newx <- c(0.5,1.5.2.5)

newy <- c(2,3,4)

out <- lm(newy ~ newx)

out giống như:

Call:
lm(formula = newy ~ newx)

Coefficients:
(Intercept)         newx  
       1.5         1.0  

Tôi đã đến đây. Nhưng bây giờ tôi đang bế tắc.

out$coefficients["newx"]

newx 

1.0 

8
as.numeric(out$coefficients["newx"])
Ben

as.numeric là không hoạt động. Có thể đó là một cách chi phí thấp để buộc ra một con số?
Andre Mikulec

1
Bạn có thể sử dụng số chỉ mục của newx(2) thay vì tên như out[[1]][[2]].
Gürol Canbek

Câu trả lời:


110

Đối với một phần tử đơn lẻ như thế này, hãy sử dụng [[thay vì [. So sánh:

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

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

Nói chung, hãy sử dụng 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.

4

Nếu câu hỏi là về việc xóa tên, thì đây là một cách khác

my_vec <- # some quantile function(returns named vector)
names(my_vec) <- NULL
my_vec
## [1] 1 2 3

0

Một cách khác là sử dụng broomgói:

broom::tidy(out)$estimate[1]
#1.5
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.