Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R序列逐步取样与不同结果的重复取样_R_Replication_Sample - Fatal编程技术网

R序列逐步取样与不同结果的重复取样

R序列逐步取样与不同结果的重复取样,r,replication,sample,R,Replication,Sample,编辑(根据要求完全修改问题) 当从一个序列中逐步采样一个索引与对整个序列采样时,我得到了一些意想不到的行为。如果我播一次种子 set.seed(123) 执行 sample(c(0.9,0.95,1,1.01,1.02,1.03,1.04,1.05)) 我明白了 [1] 1.03 0.90 1.02 1.00 0.95 1.04 1.05 1.01 [1] 1.05 0.95 1.01 1.04 0.90 1.00 1.03 1.02 [1] 0.90 1.04 1.01 1.05

编辑(根据要求完全修改问题)

当从一个序列中逐步采样一个索引与对整个序列采样时,我得到了一些意想不到的行为。如果我播一次种子

set.seed(123)
执行

sample(c(0.9,0.95,1,1.01,1.02,1.03,1.04,1.05))
我明白了

[1] 1.03 0.90 1.02 1.00 0.95 1.04 1.05 1.01  
[1] 1.05 0.95 1.01 1.04 0.90 1.00 1.03 1.02   
[1] 0.90 1.04 1.01 1.05 1.00 0.95 1.03 1.02   
但是,如果我重复执行(非常频繁,例如100次)

R只对0.9、0.95、1或1.0进行采样。我也换了种子,但行为是一样的。我错过了什么

R版本3.1.3(2015-03-09)
平台:x86_64-w64-mingw32/x64(64位)

无需复制:

> set.seed(123)
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.96
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 1.06
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.98
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 1.08
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 1.09
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.9
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 1.01
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 1.08
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 1.01
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.99
以及:

replicate
完全相同的值列表(如预期)只是sapply的包装:

> replicate
function (n, expr, simplify = "array") 
sapply(integer(n), eval.parent(substitute(function(...) expr)), 
    simplify = simplify)
通过一个小测试,我可以找到一个复制你问题的种子(我认为):


问题是在数字约束(选项(“数字”=2))下发生的序列创建。请参见此处,以获取无法复制的答案(也没有想到)。你总是有机会用随机数进行长跑。好的。嗯,这是一个真正的长期运行(即使与新鲜的R)。令我震惊的是,他从未从上述数字中连续地抽取任何样本。“从未”样本的确切含义是什么?在得出永远看不到值的结论之前,您选择了多少个数字?您在任何时候都在做
set.seed()
?在3个新的R会话中,每次都超过100次。谢谢。这正是我所看到的。所以我对种子的理解是错误的。@Triam种子是随机数生成器状态,将其设置为固定值可以生成可预测的随机序列。
set.seed
中的文档提供了更多详细信息。我的假设是,如果我在replicate中看到数字,我希望它们在逐步执行中出现,因为replicate只不过是逐步执行的一个方便函数。@Triam注意,我在逐步调用和复制调用之间重置了seed(除非在最后一步中显示连续生成)。除非您从固定的种子开始,否则新会话将在第一次需要时从时间和进程ID生成一个,通常很少生成相同的随机数序列。因此您的假设是正确的,如果您从ssame种子开始,您将通过手动复制或重复调用获得相同的数字。。。(如果您的会话不是这样,请编辑您的问题以显示它)
> set.seed(123)
> replicate(10,sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T))
 [1] 0.96 1.06 0.98 1.08 1.09 0.90 1.01 1.08 1.01 0.99
> replicate
function (n, expr, simplify = "array") 
sapply(integer(n), eval.parent(substitute(function(...) expr)), 
    simplify = simplify)
for(i in 1000:2000) { 
  set.seed(i)
  if( all(replicate(10,sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)) < 1 )) { 
    print(i)
    break
  }
}
> set.seed(1887)
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.99
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.92
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.96
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.99
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.95
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.99
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.96
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.93
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.94
> sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T)[1]
[1] 0.99
> replicate(10,sample(seq(from = 0.9, to = 1.1, by = 0.01), size=1, replace=T))
 [1] 1.07 1.06 0.97 1.07 1.00 0.99 0.91 1.01 1.05 0.97