2016-10-18 91 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