Используя R, как ссылаться на переменные (или переменные) а-ля переполнение стека

Используя R stats, я хочу получить доступ к сценарию переменной переменной, похожему на технику PHP с двойным знаком доллара: http://php.net/manual/en/language.variables.variable.php

В частности, я ищу функцию в R, которая эквивалентна $$ в PHP.


ОБНОВЛЕНИЕ: утвержденный ответ содержит основную функцию, необходимую

##################################
hello="hello world";
a="hello";
result=get(a);
print(result);
##################################

В PHP я могу назначить $a="hello"; а также $hello="hello world";, Я могу тогда использовать eval динамически изменять переменные; это называется переменной переменной в php, используя два знака доллара ($$): echo($$a); напечатает «привет мир». Он оценивает $ a, который является hello, затем оценивает $ hello.

Итак, у меня есть настройка регрессии с использованием R, с 4 опциями данных и 3 опциями модели. Я выполняю около 60 строк статистики, используя R и в основном библиотеку plm, но также tseries, lmtest (набор диагностических тестов, объединенные OLS, фиксированные эффекты (FE) и случайные эффекты (RE) с тестами на гетероскедастичность, последовательную автокорреляцию перекрестная зависимость автокорреляции и т. д. Если эти элементы существуют, я корректно обновляю стандартные ошибки в зависимости от того, что присутствует: только гетеро [vcovHC white], гетеро-последовательный или гетерокросс [vcovHC arellano], все [vcovSCC Driscoll -Kraay].

В конце я хочу отобразить скорректированные модели регрессии FE / RE для 3-х опций модели на странице. Каждая страница будет иметь один из четырех вариантов данных. Я хочу вывести это в латексе. Так что в этом сценарии мне нужен подход переменных переменных. я стараюсь eval(, parse(, substitute(, assign(,

так что посмотрим, у меня есть переменная в R mDat.total который содержит данные, которые мне нужны для регрессии. у меня тоже есть mDat.hi, mDat.mid, mDat.low, Эти 4 элемента я могу представить в виде списка строк, указывающих на переменную:

d = c("mDat.total","mDat.low","mDat.mid","mDat.hi"); # data loop

Точно так же для моделей у меня есть типы данных формул (используя формулу, Формула, pForumla, такие как model.main = emp~wage+capital|lag(wage,1)+capital:

m = c("model.main","model.lone","model.interaction"); # model loop

Я хочу перебрать i в d, j в m и выполнить несколько регрессий.

for(i in 1:length(d))
{
myData = $$d[i];
for j in 1:length(m))
{
myModel = $$m[j];
... ### do stuff with myData, myModel
that has been assigned the values of myData (a data frame)
and myModel (a model specification)

За i=1;j=1myData оценивается как mDat.total dataframe, и myModel оценивается как model.main

В идеале мне нужна отдельная функция, использующая R, которая ведет себя как $$ (например, в приведенном выше псевдокоде замените $$ на функцию doubleEvaluate (x) или VariableVariable (x).

Заранее спасибо.

монте

{Икс:

-3

Решение

Рассмотреть возможность использования получить() получить переменные окружения из строковых значений. Дополнительно рассмотрим вложенные lapply() между списком данных и списками моделей для более организованного возвращаемого объекта. Вложенные for Циклы потребуют добавления каждой итерации в растущий список, если только вам не нужно выводить. Ниже приведены примеры использования линейных моделей, lm():

model1 <- y ~ x1
model2 <- y ~ x2
model3 <- y ~ x3

dflist <- c("df1","df2","df3")
modelist <- c("model1", "model2", "model3")

# MODEL DATA RETURNS NESTED LIST OF 3 ELEMENTS
# EACH WITH CORRESPONDING DATA METRICS (COEFF, RESIDUALS, ETC.)
modeldata <- lapply(dflist,
function(x) {
df<-get(x)
lapply(modelist,
function(y) {
model <- get(y)
ols <- lm(model, df)
})
})

# BELOW CREATES MODEL SUMMARY LIST OF 3 ELEMENTS
# FOR FIRST THREE MODELS USING FIRST DATASET
modelsummary <- lapply(modeldata[[1]], summary)

Пример с вложенным for цикл:

# INITIALIZE A LIST TO CONTAIN DATA
modeldata <- list()

for (i in dflist){
df<-get(i)
for (j in modelist){
model <- get(j)

# APPEND TO MODELDATA LIST
# FINAL RETURN IS LARGE LIST OF ALL DATA MODELS
modeldata <- c(modeldata, lm(model, df))
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector