簡體   English   中英

如何在自定義 function R 上進行循環?

[英]How to for-loop over a custom function R?

我寫了這個 function,它返回值 1 在針對不同樣本大小迭代 1000 次時沒有出現在隨機樣本中的概率。

bday.function <- function(sample.size){
  x <- vector()
  for (i in 1:1000){
  x[i] <- !any(data.frame(table(sample(1:365, sample.size, replace=TRUE)))$Var1 == 1)
}
  return(mean(x))
}

現在我想使用這個 function 和另一個 for 循環來計算 500 到 1500 之間的每個樣本大小的概率,並對我的結果進行簡單的分散 plot。 這是我嘗試過的:

z <- vector()
for (i in 500:1500) {
  z[i] <- bday.function(i)
  return(plot(z))
}

編輯:當我運行 bday.function 時,output 是 TRUE 值的數量除以總(1000)TRUE/FALSE 結果:

bday.function(750)
[1] 0.122

我想對 500 到 1500 之間的樣本大小進行復制,以生成簡單的散點圖 plot

編輯2:感謝大家的幫助:這是我的最終解決方案:

x <- vector(length = 1000)

for (i in 1:1000){
  x[i] <- !any(sample(1:365, 500, replace=TRUE) == 1) 
}

x
bday.function <- function(sample.size){
  x <- vector(length= 1000)
  for (i in 1:1000){
  x[i] <- !any(sample(1:365, sample.size, replace=TRUE) == 1) 
}
  return(mean(x))
}
bday.function(750)
z <- vector(length = 1000)
tmp.index <- 500:1500
for (i in seq_along(tmp.index)) {
  z[i] <- bday.function(tmp.index[i])
}
#Plot
plot(tmp.index, z, xlab = "sample size", ylab = "Probability of no birthdays")

在此處輸入圖像描述

正如@JohnColeman在他的睿智評論中指出的那樣,您的 function 可能會很慢。 嘗試對您的代碼進行這些更改以打印 output。 我只運行了 60 次模擬人生,因為我需要完成其他事情:

#Function
bday.function <- function(sample.size){
  x <- vector()
  for (i in 1:1000){
    x[i] <- !any(data.frame(table(sample(1:365, sample.size, replace=TRUE)))$Var1 == 1)
  }
  return(mean(x))
}
#Loop
z <- vector()
vec <- 500:1500
for (i in seq_along(vec)) {
  z[i] <- bday.function(vec[i])
}
#Plot
plot(z)

Output:

在此處輸入圖像描述

你在尋找這樣的東西嗎?

bday.function <- function(sample.size) {
  
  mean(sapply(seq(1000), function(x)
    +!any(sample(365, sample.size, replace = TRUE) == 1)))
}

x <- 500:1500
y <- sapply(x, bday.function)
plot(x, y, xlab = "sample size", ylab = "Probability of no birthdays")

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM