R: Разбор языкового объекта для получения формулы

Я пытаюсь разобрать selection объект (возвращается selection функции в пакете sampleSelection), чтобы он стал пригодным для построения Formula объект (из пакета "Формула").

Конкретный пример того, что я хочу, приведен ниже. Я имею в виду стратегию, но чтобы эта стратегия работала, мне нужно понять language Тип данных немного лучше.

Я в основном ищу объяснение R language Тип данных / объект в контексте ниже.

Вот пример:

library(Formula)
library(sampleSelection)
data(Mroz87)
# define a new variable
Mroz87$kids  = (Mroz87$kids5 + Mroz87$kids618 > 0)
# create the estimation sample
Mroz87Est = Mroz87[1:600, ]
# create the hold out sample
Mroz87Holdout = Mroz87[601:nrow(Mroz87), ]
# estimate the model using MLE
heckML =  selection(selection = lfp ~ age + I(age^2) + faminc + kids + educ,
         outcome = wage ~ exper + I(exper^2) + educ + city, data = Mroz87Est) 
summary(heckML)  

Этот код оценивает модель выбора образца Хекмана и объект модели класса selection доступно в heckML, Он имеет сложную структуру, которую можно увидеть при вызове str(heckML),

Я должен быть в состоянии заполнить Formula объект, как это программно из selection объект heckML:

FormHeck = Formula(lfp |  wage ~ age + I(age^2) + faminc + kids + educ | 
                     exper + I(exper^2) + educ + city)

для последующей обработки.

Я знаю, что все компоненты, которые мне нужны для заполнения, доступны в heckML$call$selection а также heckML$call$outcomeи я могу использовать это так

tempS = evalq(heckML$call$selection)
tempO = evalq(heckML$call$outcome)

as.Formula(paste0(tempO[2], '|', tempS[2], '~', tempO[3], '|', tempS[3]))

но я понятия не имею, почему это работает. Обратите внимание, что tempS а также tempO являются объектами типа language,

а. Что значит evalq делать с language объект? Что он должен делать?
б. Как это language объект отличается от expression объект? Когда использовать либо? Указатели на чтения приветствуются.

Наконец, мне было интересно, есть ли лучший способ заполнить Formula объект FormHeck сформировать возвращаемый объект heckML, Вышесказанное - это всего лишь одна стратегия, которая работает, и пока я не пойму почему, это в основном хак.

Благодарю.

0 ответов

Другие вопросы по тегам