R 编程:sample() 函数 return 重复实体甚至 replace=TRUE
R Programming: sample() function return repeated entities even replace=TRUE
我正在使用 sample() 函数从骰子对象中获取随机样本。
> die
[1] 1 2 3 4 5 6
> sample(x=die , size=1 , replace=TRUE)
[1] 1
> sample(x=die , size=1 , replace=TRUE)
[1] 1
> sample(x=die , size=1 , replace=TRUE)
[1] 5
> sample(x=die , size=1 , replace=TRUE)
[1] 5
> sample(x=die , size=1 , replace=TRUE)
[1] 1
> sample(x=die , size=1 , replace=TRUE)
[1] 2
> sample(x=die , size=1 , replace=TRUE)
[1] 4
如果你观察到上面的输出1重复了3次,5重复了2次。但是从上面的输出甚至替换 TRUE 我可以看到频繁的多次重复。
参考:我正在阅读一本名为 Hands-On Programming with R 的书。
如果需要更多信息,请告诉我。
谢谢。
如果你用真正的骰子掷骰子,你也会看到重复的。每次骰子的每一面都有相同的机会出现,无论是否重复。
replace=
参数根本没有作用,当 size=1
时,因为在你抽到骰子的一侧之后,无论你是否替换它都没有区别。 replace=FALSE
将防止 sample()
的一次调用中出现重复。不影响sample
.
的下一次调用
这不是统计问题,而是编程问题,更适合 Stack Overflow。
如果您的目标是避免两次获得相同的号码,那么您使用的 sample()
不正确。为避免重复,您需要使用单个命令(size
多于 1 个而不是多个命令)并使用 replace=FALSE
(而不是 TRUE
)来创建示例。例如:
> sample(x=die , size=4 , replace=FALSE)
[1] 1 6 4 3
当然,这不再对应于多次公平掷骰子,因为真正的骰子可以在后续掷骰子中给出相同的数字。
有关如何使用 sample()
的完整信息,请参阅帮助页面 ?sample
。
Sample() 不会影响同一向量上 sample() 的后续运行。您需要的是一种功能,可以逐步从您正在分析的矢量中删除您的图片。这里我写了一个类似的东西,叫rsample(),其中returns取出的对象和新的vector,剥夺了选中的对象。
rsample<-function(x){
taken<-sample(x,size=1)
newx<-x[-which(x==taken)[1]]
return(list(taken=taken,new=newx))
}
die<-1:6
obj<-rsample(die)
obj$taken
[1] 3
obj<-rsample(obj$new)
obj$taken
[1] 5
obj<-rsample(obj$new)
obj$taken
[1] 2
obj<-rsample(obj$new)
obj$taken
[1] 4
obj<-rsample(obj$new)
obj$taken
[1] 1
我正在使用 sample() 函数从骰子对象中获取随机样本。
> die
[1] 1 2 3 4 5 6
> sample(x=die , size=1 , replace=TRUE)
[1] 1
> sample(x=die , size=1 , replace=TRUE)
[1] 1
> sample(x=die , size=1 , replace=TRUE)
[1] 5
> sample(x=die , size=1 , replace=TRUE)
[1] 5
> sample(x=die , size=1 , replace=TRUE)
[1] 1
> sample(x=die , size=1 , replace=TRUE)
[1] 2
> sample(x=die , size=1 , replace=TRUE)
[1] 4
如果你观察到上面的输出1重复了3次,5重复了2次。但是从上面的输出甚至替换 TRUE 我可以看到频繁的多次重复。
参考:我正在阅读一本名为 Hands-On Programming with R 的书。
如果需要更多信息,请告诉我。
谢谢。
如果你用真正的骰子掷骰子,你也会看到重复的。每次骰子的每一面都有相同的机会出现,无论是否重复。
replace=
参数根本没有作用,当 size=1
时,因为在你抽到骰子的一侧之后,无论你是否替换它都没有区别。 replace=FALSE
将防止 sample()
的一次调用中出现重复。不影响sample
.
这不是统计问题,而是编程问题,更适合 Stack Overflow。
如果您的目标是避免两次获得相同的号码,那么您使用的 sample()
不正确。为避免重复,您需要使用单个命令(size
多于 1 个而不是多个命令)并使用 replace=FALSE
(而不是 TRUE
)来创建示例。例如:
> sample(x=die , size=4 , replace=FALSE)
[1] 1 6 4 3
当然,这不再对应于多次公平掷骰子,因为真正的骰子可以在后续掷骰子中给出相同的数字。
有关如何使用 sample()
的完整信息,请参阅帮助页面 ?sample
。
Sample() 不会影响同一向量上 sample() 的后续运行。您需要的是一种功能,可以逐步从您正在分析的矢量中删除您的图片。这里我写了一个类似的东西,叫rsample(),其中returns取出的对象和新的vector,剥夺了选中的对象。
rsample<-function(x){
taken<-sample(x,size=1)
newx<-x[-which(x==taken)[1]]
return(list(taken=taken,new=newx))
}
die<-1:6
obj<-rsample(die)
obj$taken
[1] 3
obj<-rsample(obj$new)
obj$taken
[1] 5
obj<-rsample(obj$new)
obj$taken
[1] 2
obj<-rsample(obj$new)
obj$taken
[1] 4
obj<-rsample(obj$new)
obj$taken
[1] 1