R 中的 replicate()函式
Manav Narula
2021年2月25日
2021年1月22日
replicate()
函式可用於建立模擬,因為它可以重複一個表示式的特定次數。我們還可以使用 simplify
引數控制最終結果的型別為陣列或列表。
下面是 replicate()
函式的一個簡單例子。
replicate(5,1)
[1] 1 1 1 1 1
在上面的例子中,你可以看到,1
是重複 5 次的表示式。注意,這裡的最終結果是一個陣列。如果我們在函式中加入 simplify
引數(預設為 True
),並將其設定為 False
,我們將得到一個列表而不是一個陣列。比如說,我們可以使用 “簡化 “引數。
typeof(replicate(5,1,simplify = FALSE))
[1] "list"
我們也可以使用 replicate()
進行更復雜的模擬,比如建立一個二維陣列。下面的程式碼片段將展示我們如何做。
replicate(5, seq(1,10,1))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
[4,] 4 4 4 4 4
[5,] 5 5 5 5 5
[6,] 6 6 6 6 6
[7,] 7 7 7 7 7
[8,] 8 8 8 8 8
[9,] 9 9 9 9 9
[10,] 10 10 10 10 10
在這個例子中,我們使用 seq()
函式來建立一個簡單的序列。replicate()
重複 5 次序列,生成一個二維陣列。
我們也可以使用 for()
迴圈來處理這種情況。例如:
n <- numeric(5)
arr2d <- replicate(5, {
for(i in 1:5){n[i] <- print(i)};n} )
print(arr2d)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
[4,] 4 4 4 4 4
[5,] 5 5 5 5 5
請注意,我們必須在大括號外使用一個數字向量作為額外的語句;否則,replicate()
函式將得到 NULL
值,因為該值會被作為垃圾轉儲,而且不會被儲存,因為我們使用的是 for()
迴圈。
arr2d <- replicate(5, {
for(i in 1:5){print(i)}} )
print(arr2d)
輸出:
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
NULL
[[5]]
NULL
Author: Manav Narula
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn