使用 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.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
我想循环遍历 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))
}
}
使用 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.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
我想循环遍历 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))
}
}