【问题标题】:R equivalent of Matlab's 'persistent'R 相当于 Matlab 的“持久”
【发布时间】:2012-01-22 08:38:13
【问题描述】:

假设我有一个matlab 函数:

function y = myfunc(x)
    persistent a
    a = x*10
    ...

R 中与 persistent a 语句的等效语句是什么? <<-assign()?

【问题讨论】:

标签: r matlab variables persistent


【解决方案1】:

这是一种方法:

f <- local({ x<-NULL; function(y) {
   if (is.null(x)) { # or perhaps !missing(y)
      x <<- y+1
   }

   x
}})

f(3) # First time, x gets assigned
#[1] 4
f()  # Second time, old value is used
#[1] 4

发生的情况是local 围绕x&lt;-NULL 和函数声明创建了一个新环境。所以在函数内部,它可以访问x 变量并使用&lt;&lt;- 分配给它。

你可以找到这样一个函数的环境:

e <- environment(f)
ls(e) # "x"

【讨论】:

  • 很好,谢谢。但是有一个问题...... matlab 帮助显示“它们与全局变量的不同之处在于,持久变量只有在其中声明它们的函数才知道。这可以防止持久变量被其他函数或 MATLAB 命令行更改。”您的解决方案是否与该陈述一致?
  • @AndyBarbour 基本上是这样。除非你像 Tommy 那样直接访问它。然后你可以像e$x = 10一样改变它。
  • @AndyBarbour - 如果你付出一些努力,R 中的几乎所有东西都可以改变;-)。但是,没有人可以错误地更改值。所以在这方面它与 MATLAB 语句是一致的。
  • 我实际上更喜欢这里的 R 灵活性,因为就像你指出的那样,你仍然不能错误地做到这一点。
  • 此功能将在CRAN 被禁止,因为它会修改全局环境。请注意:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多