循环的内部增量?在r
我正在尝试进行1000次模拟,以查看有多少f值处于高于1.48和低于0.67的拒绝区域 我有这一点,但变量不会像它们应该的那样递增:循环的内部增量?在r,r,statistics,R,Statistics,我正在尝试进行1000次模拟,以查看有多少f值处于高于1.48和低于0.67的拒绝区域 我有这一点,但变量不会像它们应该的那样递增: for (k in 1:1000){ Adata = rnorm(100, mean = 30, sd = 10) Bdata = rnorm(100, mean = 45, sd = 10) f = (sd(Bdata)^2)/(sd(Adata)^2) if (f > 1.48){ a = 0 a <-
for (k in 1:1000){
Adata = rnorm(100, mean = 30, sd = 10)
Bdata = rnorm(100, mean = 45, sd = 10)
f = (sd(Bdata)^2)/(sd(Adata)^2)
if (f > 1.48){
a = 0
a <- a + 1}
if (f < .67){
b = 0
b <- b + 1}
}
a
[1] 1
b
[1] 1
for(1:1000中的k){
Adata=rnorm(100,平均值=30,标准差=10)
b数据=r形式(100,平均值=45,标准差=10)
f=(标准差(数据)^2)/(标准差(数据)^2)
如果(f>1.48){
a=0
a在第一个示例中,每次if语句为true时,您都将a
和b
重置为零。因此,最大值始终为1
要修复,请重新排列这些行:
a = 0 #initialize outside of the loop
b = 0 #initialize outside of the loop
set.seed(1) # added for SO as you are using rnorm, remove this when you run your simulations
for (k in 1:1000){
Adata = rnorm(100, mean = 30, sd = 10)
Bdata = rnorm(100, mean = 45, sd = 10)
f = (sd(Bdata)^2)/(sd(Adata)^2)
if (f > 1.48){
a <- a + 1}
if (f < .67){
b <- b + 1}
}
然后计算每行的f
分数:
f在第一个示例中,每次if语句为true时,都将a
和b
重置为零。因此,最大值始终为1
要修复,请重新排列这些行:
a = 0 #initialize outside of the loop
b = 0 #initialize outside of the loop
set.seed(1) # added for SO as you are using rnorm, remove this when you run your simulations
for (k in 1:1000){
Adata = rnorm(100, mean = 30, sd = 10)
Bdata = rnorm(100, mean = 45, sd = 10)
f = (sd(Bdata)^2)/(sd(Adata)^2)
if (f > 1.48){
a <- a + 1}
if (f < .67){
b <- b + 1}
}
然后计算每行的f
分数:
f在第一个代码块中,您每次迭代都将a和b重置为0,然后可能添加1(因此它们最多为1,因为下一次迭代它们将再次设置为0)
在第二个块中,您将a和b设置为TRUE或FALSE,但您正在覆盖该值,因此您只能看到最后一次迭代的值(实际上,该循环仅在k等于1000时运行一次,但如果有1:1000,则只能看到最后一次迭代)
简单的解决方案是移动a=0
和b=0
(或者更好的方法是在第一个代码块中,每次迭代都将a和b重置为0,然后可能添加1(因此它们最多是1,因为下一次迭代它们将再次设置为0)
在第二个块中,您将a和b设置为TRUE或FALSE,但您正在覆盖该值,因此您只能看到最后一次迭代的值(实际上,该循环仅在k等于1000时运行一次,但如果有1:1000,则只能看到最后一次迭代)
简单的解决方案是移动a=0
和b=0
(或者更好的a尝试创建全局变量。它脏了,但解决了问题。尝试创建全局变量。它脏了,但解决了问题。
set.seed(1)
Adata = matrix(data = rnorm(100*1000, mean = 30, sd = 10), nrow = 1000, ncol = 100)
Bdata = matrix(data = rnorm(100*1000, mean = 30, sd = 10), nrow = 1000, ncol = 100)
sum(f > 1.48)
[1] 15
sum(f < .67)
[1] 25
out <- replicate(1000, {
Adata = rnorm(100, mean = 30, sd = 10)
Bdata = rnorm(100, mean = 45, sd = 10)
(sd(Bdata)^2)/(sd(Adata)^2)
})
sum( out > 1.48 )
sum( out < 0.67 )
sum( out > 1.48 | out < 0.67 )