Умножение именованного вектора чисел на одно число в R

#r #function #dataframe #vector

#r #функция #фрейм данных #вектор

Вопрос:

В моем коде ниже m3$modelStruct$varStruct возвращает именованный вектор чисел. Но когда я умножаю это на sigma(m3)^2 , умножение не происходит. Есть ли исправление для этого?

 library(nlme)

dat <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/var.csv')
dat$fmonth <- factor(dat$month)


vf2 <- varIdent(form= ~ 1 | fmonth)

m3 <- lme(y ~ x*fmonth, random = ~1|id, data = dat,
              weights = vf2)


sigma(m3)^2 * m3$modelStruct$varStruct   ## PROBLEM IS HERE!
  

Ответ №1:

Ваши предположения о m3$modelStruct$varStruct том, что вы являетесь именованным вектором, неверны. Ваше умножение возвращает объект

 class(sigma(m3)^2 * m3$modelStruct$varStruct)
#[1] "varIdent" "varFunc" 
  

Таким образом, вызывается метод print print.varFunc .

Если вы действительно хотите умножить на значения, отображаемые на print(m3$modelStruct$varStruct) , вам необходимо извлечь коэффициенты:

 m3$modelStruct$varStruct
#Variance function structure of class varIdent representing
#        5         6         9        10        12         3         4        11         8         2         1         7 
#1.0000000 1.0065306 1.8362431 1.3632609 0.7827463 1.2128426 0.8708676 0.9233713 0.6003184 0.6064313 1.2060820 0.8399081


sigma(m3)^2 * coef(m3$modelStruct$varStruct, uncons = FALSE, allCoef = TRUE)
#       5        6        9       10       12        3        4       11        8        2        1        7 
#4.292699 4.320733 7.882439 5.852068 3.360094 5.206368 3.738372 3.963755 2.576986 2.603227 5.177347 3.605472