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之後僅是將上述語法重新呈現,會還給原來設定的指令

###