使用 R,如何引用可变变量(或变量变量)a la PHP

Using R, how to reference variable variables (or variables variable) a la PHP

使用 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); 将打印 "hello world"。它评估 $a 是 hello,然后评估 $hello.

所以,我有一个使用 R 的回归设置,有 4 个数据选项和 3 个模型选项。我使用 R 执行大约 60 行统计数据,主要是库 plm,还有 tseries、lmtest(一堆诊断测试、合并 OLS、固定效应 (FE) 和随机效应 (RE),以及异方差性、序列自相关测试, 交叉依赖自相关等。如果存在这些元素,我会根据存在的内容巧妙地更新标准误差:仅异质 [vcovHC white]、异质序列或异质交叉 [vcovHC arellano]、所有 [vcovSCC Driscoll -克雷].

最后,我想在一个页面上为 3 个模型选项显示调整后的回归模型 FE/RE。每个页面都有四个数据选项之一。我想在乳胶中输出这个。所以在这种情况下,我需要一个变量变量的方法。我正在尝试 eval(parse(substitute(assign(

所以请考虑我在 R mDat.total 中有一个变量,其中包含我需要进行回归的数据。我还有 mDat.himDat.midmDat.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

我想循环遍历 d 中的 i,m 中的 j,并执行一系列回归。

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=1,myData 计算为 mDat.total 数据框,myModel 计算为 model.main

理想情况下,我想要一个使用 R 的独立函数,其行为类似于 $$(例如,在上面的伪代码中,将 $$ 替换为函数 doubleEvaluate(x) 或 VariableVariable(x)。

提前致谢。

蒙特

{x:

考虑使用 get() 从字符串值中获取环境变量。此外,考虑数据框和模型列表之间的嵌套 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))    
  }  
}