使用 R 中不同的均值和 Sd 值模擬許多觀測值的 Rnorm
本文將演示在 R 中使用不同的 mean
和 sd
值模擬 rnorm
的多種方法。
使用 Map
函式模擬 R 中許多觀察的 rnorm
rnorm
函式用於生成正態分佈的隨機偏差,假定預設 mean
等於 0
,標準偏差 (sd
) 是 1
。請注意,後面的引數可以作為元素向量選擇性地傳遞。在這種情況下,我們將預定義的 mean
和 sd
值儲存為資料框的一部分。Map
函式將給定的函式物件應用於多個向量的相應元素。它將函式物件作為第一個引數,將向量物件作為後面的引數。請注意,向量物件的數量應等於給定函式物件的強制引數。在以下示例中,我們為每個 data
元素生成 5
個偏差。此外,我們使用 set.seed
函式來指定多個程式執行之間可重現結果的種子值。Map
函式返回一個 list
物件。
set.seed(123)
df1 <- data.frame(
data = sample(1:64, 4),
mean = sample(1:64, 4),
sd = c(1, 4, 8, 20)
)
n <- 5
func1 <- function(x, y) rnorm(n, mean = x, sd = y)
list1 <- Map(func1, df1$mean, df1$sd)
list1
輸出:
[[1]]
[1] 3.129288 4.715065 3.460916 1.734939 2.313147
[[2]]
[1] 40.21735 46.89633 43.43926 43.60309 42.44273
[[3]]
[1] 45.55327 64.29531 53.98280 34.26706 55.61085
[[4]]
[1] 44.54417 32.64353 49.64050 33.47991 39.42218
使用 apply
函式模擬 R 中許多觀察的 rnorm
或者,我們可以使用 apply
函式來模擬資料框中不同行的 rnorm
。apply
函式通常用於返回將給定函式物件應用於陣列或矩陣的指定邊距的值。使用名為 MARGIN
的第二個引數指定邊距。MARGIN
引數可以具有 1
的值,表示要應用於矩陣行的函式。另一方面,值 2
表示矩陣的列,而 c(1,2)
表示矩陣的行和列。apply
函式的第一個引數可以是陣列或矩陣。但是請注意,如果傳遞的物件不是陣列,則會使用 as.matrix
或 as.array
函式將其強制轉換為陣列型別。
set.seed(123)
df1 <- data.frame(
data = sample(1:64, 4),
mean = sample(1:64, 4),
sd = c(1, 4, 8, 20)
)
n <- 5
func1 <- function(x) rnorm(n, mean = x[1], sd = x[2])
apply(df1[-1], 1, FUN = func1)
輸出:
[,1] [,2] [,3] [,4]
[1,] 3.129288 40.21735 45.55327 44.54417
[2,] 4.715065 46.89633 64.29531 32.64353
[3,] 3.460916 43.43926 53.98280 49.64050
[4,] 1.734939 43.60309 34.26706 33.47991
[5,] 2.313147 42.44273 55.61085 39.42218
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn