我定義了一個函式創建 3 個從 1 到 36 的亂數,并且我允許重復。我想測驗在回圈中使用 if 陳述句在 1000 次迭代中一只手可以得到三個相同數字的次數。我不知道那里發生了什么:
f <- function(all){
all <- seq(1:36)
hand <- sample(all, 3, replace=T)
return(c((hand),(sum(hand))))
}
f()
hand <- f()
hand
a=NaN
for (i in 1:1000){
hand[i] <- f()
if (hand[1]=hand[2]=hand[3]){
a[i]=TRUE
}else{
a[i]=FALSE
table(a)["TRUE"]
}
}
uj5u.com熱心網友回復:
替代方法:
set.seed(99)
hands <- replicate(1000, sample(seq(1:36), 3, replace = TRUE))
table(apply(hands, 2, function(x) any(duplicated(x))))
FALSE TRUE
902 98
這等同于:
set.seed(99)
a <- c()
for (i in 1:1000){
hand <- f()
if(any(duplicated(hand))){
a[i] <- TRUE
} else{
a[i] <- FALSE
}
}
table(a)
FALSE TRUE
902 98
uj5u.com熱心網友回復:
我認為問題在于您如何保存結果。請參閱下面的評論:
f <- function(all){
all <- seq(1:36)
hand <- sample(all, 3, replace=T)
return(c((hand),(sum(hand))))
}
f()
hand <- f()
hand
##a=NaN
a <- vector(mode = "numeric",length = 10000)
for (i in 1:10000){
# change from hand[i] <- f()
# to hand <- f(), basically hand is a vector of length 3, you are trying to save an element of length 4 into the first value of length 1
hand <- f()
# Need to use = not == and do multiple comparisons (hand-[1
if ((hand[1]== hand[2]) & (hand[2]== hand[3])){
a[i]=TRUE
} else{
a[i]=FALSE
# table(a)["TRUE"]
# not sure what yyou want to do
}
}
uj5u.com熱心網友回復:
更一般地說,我們可以構建一個函式來查看樣本大小n、最小值min、最大值max、重復次數的重復次數times。
f <- function(n, min, max, times){
hand <- as.data.frame(NA)
for (i in 1:times){
hand[i, 1:n] <- floor(runif(n, min, max))}
}
您可以嘗試在每個樣本中使用三個值,最小 1,最大 36,并重復 1000 次:
hand <- f(3, 1, 36, 1000)
然后您可以檢查有多少重復(無論三個值的順序如何):
n_repetitions= duplicated(t(apply(hand, 1, sort)))
sum(n_repetitions)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466905.html
上一篇:Else被簡單地跳過,但只是有時
