Сгладить именованный список в R

Это очень простой вопрос, я не могу поверить, что не могу понять его. Я искал высоко и низко для решения.

У меня есть именованный список, например:

> fitted(mdl)
        1         2         3         4         5         6         7         8 
-424.8135 -395.0308 -436.5832 -414.3145 -382.9686 -380.7277 -394.2808 -394.3340 
        9        10        11        12        13        14        15        16 
-401.6710 -386.6691 -407.4558 -427.4056 -397.4963 -415.6302 -436.1703 -378.4489 
       17        18        19        20        21        22        23        24 
-353.7718 -377.3190 -390.5177 -370.3608 -389.7843 -397.8872 -401.9937 -390.4119 
       25        26        27        28        29        30        31        32 
-387.4962 -422.4953 -427.1638 -402.5654 -409.6334 -360.7378 -355.1824 -370.9121 
       33        34        35        36        37        38        39        40 
-377.6591 -373.3049 -388.4417 -398.1172 -357.1107 -376.8618 -378.7070 -420.5362 
       41        42        43        44        45        46        47        48 
-390.8324 -406.5956 -403.1015 -363.5008 -347.2580 -371.0433 -376.4454 -360.3895 
       49 
-383.9711 

mdl — это объект, возвращенный из lm(), и я пытаюсь извлечь предсказанные значения с помощью функции извлечения fitted()

Я бы хотел, чтобы это было без имен 1,2,3,.... str() сказал мне, что names — это атрибут. я могу сделать

> names(fitted(mdl))
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14" "15"
[16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
[31] "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45"
[46] "46" "47" "48" "49"

И это то, что я хочу, кроме данных. Попробовав различные комбинации unlist, cbind/rbind, do.call, c() и т. д., я наконец нашел решение:

> data.frame(fitted(mdl))$fitted.mdl
 [1] -424.8135 -395.0308 -436.5832 -414.3145 -382.9686 -380.7277 -394.2808
 [8] -394.3340 -401.6710 -386.6691 -407.4558 -427.4056 -397.4963 -415.6302
[15] -436.1703 -378.4489 -353.7718 -377.3190 -390.5177 -370.3608 -389.7843
[22] -397.8872 -401.9937 -390.4119 -387.4962 -422.4953 -427.1638 -402.5654
[29] -409.6334 -360.7378 -355.1824 -370.9121 -377.6591 -373.3049 -388.4417
[36] -398.1172 -357.1107 -376.8618 -378.7070 -420.5362 -390.8324 -406.5956
[43] -403.1015 -363.5008 -347.2580 -371.0433 -376.4454 -360.3895 -383.9711

Но это очень окольный хак для чего-то, что должно быть прямо у меня под носом.

Любые предложения о том, что мне не хватает?

(Я не знаю, как правильно сформулировать проблему или придумать лучшее название для вопроса, так как я не знаю терминологии, чтобы описать то, что я хочу. Так что не стесняйтесь редактировать :)


person Samuel Tan    schedule 25.04.2015    source источник
comment
@АнандаМахто Спасибо!! Это сработало!   -  person Samuel Tan    schedule 25.04.2015
comment
@SamuelTan Хорошая работа, задав свой вопрос!   -  person Richard Erickson    schedule 25.04.2015


Ответы (2)


Если вы просто пытаетесь удалить names объекта, просто используйте unname.

Вот простой пример:

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
fitted(lm.D9)
#     1     2     3     4     5     6     7     8     9    10    11    12    13 
# 5.032 5.032 5.032 5.032 5.032 5.032 5.032 5.032 5.032 5.032 4.661 4.661 4.661 
#    14    15    16    17    18    19    20 
# 4.661 4.661 4.661 4.661 4.661 4.661 4.661 

Удалите имена:

unname(fitted(lm.D9))
#  [1] 5.032 5.032 5.032 5.032 5.032 5.032 5.032 5.032 5.032 5.032 4.661 4.661 4.661
# [14] 4.661 4.661 4.661 4.661 4.661 4.661 4.661
person A5C1D2H2I1M1N2O1R2T1    schedule 25.04.2015

вот еще один простой способ:

set.seed(100)
x <- rpois(5, 5)
y <- 2*x + rnorm(5)
mod <- lm(y ~ x)
fitted_ <- fitted(mod)
fitted_
   1        2        3        4        5 
# 7.822806 6.312569 9.333042 4.802333 9.333042 
names(fitted_) <- NULL
fitted_
# [1] 7.822806 6.312569 9.333042 4.802333 9.333042
person stas g    schedule 05.11.2015