如何在R中创建请求因变量?例如
a <- 1
b <- a*2
a <- 2
b
# [1] 2
Run Code Online (Sandbox Code Playgroud)
但我期待结果4. R如何自动维持关系?非常感谢 解释 - 我正在尝试使用单元格之间的关系(公式或函数)创建excel spreeadsheet.R的输入用于检验csv(相同值,某些函数或公式)并仅输出值
Mat*_*rde 10
这听起来像你在寻找 makeActiveBinding
a <- 1
makeActiveBinding('b', function() a * 2, .GlobalEnv)
b
# [1] 2
a <- 2
b
# [1] 4
Run Code Online (Sandbox Code Playgroud)
如果你想使用Hadley的漂亮pryr
软件包,语法会更简单:
library(pryr)
b %<a-% (a * 2)
Run Code Online (Sandbox Code Playgroud)
但是,大多数人并不希望变量表现得像这样.因此,如果您正在编写其他人正在阅读的代码,我不建议使用R的此功能.b
在a
更改或执行b
功能时显式更新a
.
警告:这不是一个好主意,只有在你知道自己在做什么的情况下才能使用任务回调.
你可以做这样的事情,但这很乏味,有更好的方法来实现你的目标.您可以创建一个在每个顶级评估之后调用的函数,该评估基本上为您重新分配.
modified <- function(expr, value, ok, visible){
if(exists("a")){
assign("b", a*2, env = .GlobalEnv)
}
return(TRUE)
}
addTaskCallback(modified)
Run Code Online (Sandbox Code Playgroud)
跑完之后你应该能够得到这个......
> a
Error: object 'a' not found
> b
Error: object 'b' not found
> a <- 2
> a
[1] 2
> b
[1] 4
> a <- 3
> a
[1] 3
> b
[1] 6
Run Code Online (Sandbox Code Playgroud)
请注意,如果要模拟电子表格,最好定义一个函数来获取输入并执行所有必要的计算以获得所需的输出.R不是Excel,如果不像Excel那样对待它会是最好的.