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
, Вышесказанное - это всего лишь одна стратегия, которая работает, и пока я не пойму почему, это в основном хак.
Благодарю.