【问题标题】:How do I extract just the number from a named number (without the name)?如何从命名号码(没有名字)中提取号码?
【发布时间】:2013-04-01 02:05:59
【问题描述】:

我正在寻找的只是B1(newx) 线性模型系数的值,而不是名称。我只想要 0.5 的值。我不想要“newx”这个名字。

newx <- c(0.5,1.5.2.5)

newy <- c(2,3,4)

out <- lm(newy ~ newx)

out 看起来像:

Call:
lm(formula = newy ~ newx)

Coefficients:
(Intercept)         newx  
       1.5         1.0  

我到了这里。但现在我被困住了。

out$coefficients["newx"]

newx 
 
1.0 

【问题讨论】:

  • as.numeric(out$coefficients["newx"])
  • as.numeric 确实有效。也许这是一种低成本的强制数字方式?
  • 可以使用newx(2)的索引号代替out[[1]][[2]]这样的名称。

标签: r vector named lm


【解决方案1】:

对于这样的单个元素,请使用[[ 而不是[。比较:

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

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

更一般地说,使用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.

【讨论】:

    【解决方案2】:

    如果问题是关于删除名称,这里有另一种方法

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

    【讨论】:

      【解决方案3】:

      另一种方法是使用broom 包:

      broom::tidy(out)$estimate[1]
      #1.5
      

      【讨论】:

      • 有点矫枉过正,不是吗?您能否解释一下为什么这个解决方案比公认的答案更优雅/高效?我是出于最诚实的无知而不是迂腐的主题。
      【解决方案4】:

      一个简单而直接的方法是

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

      【讨论】:

        猜你喜欢
        • 2013-03-22
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多