看板 R_Language 關於我們 聯絡資訊
可以改成 Recursive Function。 samplemaker_weibull <- function(n = 100, shape = 4, scale = 1, end = 1.5, res) { x <- rweibull(n, shape, scale) t <- runif(n, 0, end) observedx <- x[which(x > t)] if (length(observedx) == n) { return(observedx) } else { res <- observedx return( c(res, samplemaker_weibull(n - length(res), shape, scale, end, res) ) ) } } samplemaker_weibull() 過程就是先做一次,若長度不夠就自己遞迴。 若是第一次寫遞迴可能會看不懂,可先從簡單的例子練習。 留意到需要增加一個 res parameter 來達成串接,但不需要指定值。 ※ 引述《empireisme (empireisme)》之銘言: : 我本身使用R大概一兩年 : 我想要生滿足條件的樣本直到某個特定數字 例如100個 : 目前自己想到的解法是 生遠大於100個樣本 : 例如1000個 再去找前100個 但這樣就會生超多個 : 我知道可能可以使用while 或是 repeat做到 : 但是想不太到條件 : 希望前輩可以提示一下怎麼設條件的作法 : 我的目的是使得obserdx的個數到n個 (例如100) : observedx 的條件如下 : observedx <- x[which(x>t)] : 以下是我的生樣本code : samplemaker_weibull<- function(n=130,shape=4,scale=1,end=1.5 ){ : x <- rweibull(n,shape,scale) : t <- runif(n,0,end) : observedx <- x[which(x>t)] : return(observedx) : } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.43.95 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1575049279.A.E11.html ※ 編輯: andrew43 (220.133.43.95 臺灣), 11/30/2019 01:58:02
TreeMan: 這個好 11/30 08:26
empireisme: 這個好 11/30 13:03