在for循环中使用.GlobalEnv和`[[`operator

时间:2015-06-30 14:25:52

标签: r for-loop global-variables subset

R variable names in loop, get, etc等问题在来自其他语言的人群中很常见。正如我在该示例中给出的那样,标准答案通常是不可能遍历全局环境中的变量列表并修改基础变量,只能复制副本。这符合R语义,即不通过引用传递值并根据需要创建对象的副本。

然而,这种类型的构造起作用:

xData <- data.frame(a = 1:2, b = 3:4)
yData <- data.frame(a = 4:5, b = 6:7)

varList <- ls(pattern = "Data$")

for(var in varList) {
  .GlobalEnv[[var]]$c <- with(.GlobalEnv[[var]], a + b)
}
xData
#   a b c
# 1 1 3 4
# 2 2 4 6

除了糟糕的编程风格,并不真正适合&#39; R&#39;做事方式,这种编码方式有什么具体问题吗?

请注意我并不是说这是一种好习惯,只是好奇这是否可能会产生意想不到的副作用。

0 个答案:

没有答案