提问人:mshaffer 提问时间:1/31/2016 最后编辑:mshaffer 更新时间:1/31/2016 访问量:2177
使用 R,如何引用变量变量(或变量变量)就像 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 中,我可以分配 和 .然后,我可以使用动态更改变量;这在 PHP 中称为变量变量,使用两个美元符号 ($$): 将打印“Hello World”。它评估$a哪个是你好,然后评估$hello。$a="hello";
$hello="hello world";
eval
echo($$a);
因此,我有一个使用 R 的回归设置,有 4 个数据选项和 3 个模型选项。我使用 R 执行了大约 60 行统计,主要是库 plm,但也使用 tseries、lmtest(一堆诊断测试、合并 OLS、固定效应 (FE) 和随机效应 (RE),以及异方差性、序列自相关、交叉依赖自相关等测试。如果存在这些元素,我会根据存在的内容巧妙地更新标准误差:只有异质 [vcovHC 白色]、异质序列或异质杂交 [vcovHC arellano]、所有 [vcovSCC Driscoll-Kraay]。
最后,我想在一个页面上显示 3 个模型选项的调整后的回归模型 FE/RE。每个页面将具有四个数据选项之一。我想在 Latex 中输出它。因此,在这种情况下,我需要一种变量变量方法。我正在尝试 , , , .eval(
parse(
substitute(
assign(
因此,假设我在 R 中有一个变量,其中包含回归所需的数据。我还有 , , .这 4 个元素,我可以表示为指向变量的字符串列表:mDat.total
mDat.hi
mDat.mid
mDat.low
d = c("mDat.total","mDat.low","mDat.mid","mDat.hi"); # data loop
同样,对于模型,我有公式数据类型(使用 formula,Formula,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)
对于 ,myData 的计算结果为 DataFrame,myModel 的计算结果为i=1;j=1
mDat.total
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))
}
}
评论
上一个:PHP中变量的类和对象范围
评论