2016-02-12 62 views
4

我在Mac上使用RStudio 0.99.467和R 3.2.2,並且我注意到View調用隨機數生成器或類似的東西。下面是代碼:爲什麼RStudio在View中調用一個隨機生成器?

set.seed(1) # not needed when I run it on RStudio, but needed on R 
rs <- .Random.seed 
cat(76 + 8) 
all(.Random.seed == rs) 
# TRUE -- because a simple function shouldn't change the random numbers 
View(3) 
all(.Random.seed == rs) 
# FALSE -- ??? 

事實上,唯一的區別是在第二號.Random.seed

all((.Random.seed == rs)[-2]) 
# TRUE 

這似乎在10個單位的增加總是

.Random.seed[2] - rs[2] 
# 10 

是,預期View函數的行爲還是僅在我正在運行的版本中的錯誤?

+1

您的代碼不起作用,'.Random.seed'默認沒有定義。你至少需要一個'set.seed()'。 – 2016-02-12 04:50:46

+0

隨着您的編輯,您將展示一件有趣的事情。 RStudio已經有一個'.Random.seed'集合,這在控制檯R中並不是這樣。所以我之前的評論在你的情況下是不正確的。 – 2016-02-12 05:01:47

+0

雖然我無法在Ubuntu 14.04上運行的舊版本的RStudio(0.98.1103)上重現此操作。 – 2016-02-12 05:17:42

回答

1

這確實是預期的。使用R sample函數,0.99中的RStudio數據查看器會爲您的數據生成隨機緩存密鑰。 0.98中的數據查看器沒有這樣做(它只是生成原始HTML)。

我剛剛登錄了一個問題,希望在未來版本中消除這種副作用(我同意查看數據會改變您的隨機種子)。

+0

有沒有辦法創建一個函數來解決這個問題? –

+0

是的,你可以預先保存隨機種子,然後恢復(參見'set.seed')。順便說一句,我們剛剛解決了RStudio本身的問題,所以如果你想嘗試它,它會在下一個日常版本(0.99.1081或更新版本)中。 – Jonathan