simulation using R
simSexHeight
KY
2020-05-15
#
#
simSexHeight <- function(n) {
##轉成Matrix (矩陣),runif()形成均勻分佈的隨機數,rnorm產生隨機函數,設定列數 nrow=2
m <- matrix(c(runif(n), rnorm(n)), ncol=2)
##if('條件'){'做A'}、else{'做B'}
draw <- function(mr) { # mr = one row of m
if (mr[1] < 0.505) {
sex <- 1
cm <- 170 + 7*mr[2]
} else {
sex <- 0
cm <- 160 + 5*mr[2]
}
##函式(function)可以輸入參數、執行陳述式,最後回傳輸出(return)
return(c(sex, cm))
}
##向量或矩陣的 “轉置” (transpose) 使用 t(),對一陣列 X 的邊際 () 執行同一函式做運算, 並回傳一向量, 陣列或列表. 其中引數 x 為所要執行之陣列物件。as.data.frame再轉成data.frame的形式
person <- t(apply(m, 1, draw))
person <- as.data.frame(person)
##ifelse('條件', '條件若成立:做A', '條件若不成立:做B')
person[, 1] <- ifelse(person[, 1]==1, "M", "F")
names(person) <- c("Gender", "Height")
return(person)
}
##指定呈現多少欄列就可以叫出設定的數據
simSexHeight(6)
## Gender Height
## 1 F 152.8232
## 2 M 165.1958
## 3 M 163.3765
## 4 M 165.4417
## 5 F 152.9393
## 6 F 156.9984
##原來如果只是simSexHeight(),return之後僅是將上述語法重新呈現,會還給原來設定的指令
###