[R提供的正是這種使用情況稱爲replicate
功能,它會重複操作多次指定,並存儲在一個向量的結果:
> replicate(10, sum(rnorm(5)))
[1] -0.2286870 1.5123902 -5.8179539 1.2119908 -2.8749987 5.5817021
[7] 2.5427969 2.1833426 0.4884455 -3.6787912
如果生產函數數據更復雜的,那麼你可以使用複製來調用一個函數,或直接使用sapply。所以
> genRandomData <- function() {
random <- rnorm(100)
c(sum(random), var(random))
}
> replicate(10, genRandomData())
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 6.612235 6.895032 -4.004501 -8.250871 2.3098680 2.0388161 23.5202949
[2,] 1.082576 0.769107 1.119480 1.206932 0.9930102 0.9078762 0.9544335
[,8] [,9] [,10]
[1,] -12.2080648 9.0074524 0.2358715
[2,] 0.8256081 0.8669045 0.9017415
,或者以使用sapply相同的輸出(這是很好的,因爲它不替代回覆),
> sapply(integer(10), function(x) {
random <- rnorm(100)
c(sum(random),var(random))
})
如果你想獲得一個數據幀從年底這個,你必須轉置;所以
> data.frame(t(sapply(integer(10), function(x) {
random <- rnorm(100)
list(s=sum(random),v=var(random))
})))
s v
1 -6.343845 1.0397
2 12.94773 0.9480807
3 5.811322 0.9670198
4 -1.941444 1.04547
5 -0.9094589 0.862759
6 -2.852641 0.5504582
7 -8.471266 1.080554
8 -17.2341 1.201679
9 11.60805 1.150254
10 -7.138314 1.080731
謝謝,我大概簡化了這個問題太多。我試圖重複的過程有八個獨立的功能以及其他東西的加載,在R中佔用了超過20行,我能夠在整個事情上使用複製嗎? –
把所有的代碼放在一個函數中(比如'dostuff')然後執行'replicate(10,dostuff())' –
最簡單的事情就是將行爲封裝到一個函數中,然後使用複製運行多次。我會更新我的答案。 – user295691