2016-10-18 63 views
0

假设一个简单的代码:如何使静态变量动态?

> sample(2,5,replace=TRUE) 
[1] 2 1 1 1 2 

当再次调用它可以采取其它变量:

> sample(2,5,replace=TRUE) 
    [1] 1 2 2 1 2 

然而,当分配给一个变量它粘到一个预定义组:

> n <- (sample(2,5,replace=TRUE)) 
> n 
[1] 1 1 2 1 1 
> n 
[1] 1 1 2 1 1 
> n 
[1] 1 1 2 1 1 

我们如何让n变量的值改变呢?

+1

嗨,欢迎SO。这是非常不鼓励的。未来,您的代码将变得非常难以阅读和调试,无论是您还是将阅读代码的人员。只需定义一个函数,以便您可以再次调用它。 – Stereo

+0

立体声是正确的,正如其他人进一步提到的那样,在R中使用它的惯用方式是为它编写一个函数。 –

回答

3

我边踏步为什么你要做到这一点,但这里的那是有些单程一些问题....先进:

makeActiveBinding("n",function() sample(2,5,replace = TRUE),.GlobalEnv) 
> n 
[1] 2 2 1 2 1 
> n 
[1] 1 2 2 2 2 
> n 
[1] 2 1 1 1 1 

这里发生的事情是,n正在创建在全局环境中,然后链接到该函数,以便每当需要值n时,它将调用该函数。

+0

很好的解决方案,但为什么哦,为什么有些人想这样做?! – Stereo

+1

@Stereo我同意,我的默认回应是写一个函数,就像DMC所做的一样。我只是认为展示一些更具异国情调的东西会很有趣。 – joran

+0

太棒了!然而确实太高级了...... –

2

创建功能将是惯用[R方法:

samp <- function() sample(2, 5, replace = TRUE) 

samp() 
[1] 2 1 2 2 2 
samp() 
[1] 1 2 2 1 1 
+0

感谢您的回答! - 也是很好的见解,但是我特意寻找创建一个与此处的函数具有相同属性的非函数变量 –

0

...或直接致电样品()几次...

> n <- sample(2,5, replace=TRUE) 
> n 
[1] 1 2 2 1 2 
> n <- sample(2,5, replace=TRUE) 
> n 
[1] 2 2 2 1 1