如何创建循环

Jar*_*red 5 statistics loops r

你能解释一下R-Code中循环的结构/概念吗?我不知道从哪里开始这个家庭作业问题.我能够创建我需要的指数分布

> rexp(n=200, rate=0.5) 
Run Code Online (Sandbox Code Playgroud)

但现在我需要创建2000个这个rexp的样本并计算每个样本的平均值.然后我需要计算2,000个样本均值的均值和方差.我知道如何找到简单分布的均值和方差(例如:mean(rexp)var(rexp)),所以我的主要问题是理解循环的概念并将其付诸行动.

所以我开始输入:

> rexp(n=200,rate=0.5)
Run Code Online (Sandbox Code Playgroud)

然后我命名这个指数分布:

> exdi = rexp(n=200,rate=0.5)
Run Code Online (Sandbox Code Playgroud)

基于一个处理总和的例子,我进入了

>y.exdi=vector(length=2000)
>for(i in 1:2000){y.exdi[ i ]=mean(exdi)}
Run Code Online (Sandbox Code Playgroud)

R工作区没有给出任何响应,所以我命名了这个函数并尝试了这个:

>Twothou = for(i in 1:2000){y.exdi[ i ]=mean(exdi)}
>mean(Twothou)
Run Code Online (Sandbox Code Playgroud)

但后来我收到此错误消息:

[1] NA
Warning message:
In mean.default(Twothou) : argument is not numeric or logical: returning NA
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

dar*_*zig 6

你刚刚创建了一个相当值的2000个元素的非常好的向量 - 用你的样本的均值来表示只为指数分布一次.通过检y.exdi入您的控制台来查看.

如果要为此解决方案使用循环,则应在每次迭代中创建新样本和新样本.您可以轻松地使用例如sapply(环绕包装for)应用于1:2000:

sapply(1:2000, function(x) mean(rexp(n = 200, rate = 0.5)))
Run Code Online (Sandbox Code Playgroud)

或者更确切地说直接调用eg replicate(用于此类情况):

replicate(2000, mean(rexp(n = 200, rate = 0.5)))
Run Code Online (Sandbox Code Playgroud)

  • +1'复制'.我完全不推荐`sapply`方法,因为编写忽略其参数的函数是丑陋的. (2认同)

ali*_*boy 3

我认为你应该将随机数生成器放在循环rexp for

y.exdi=vector(length=2000)
for(i in 1:2000){
    y.exdi[ i ]=mean(rexp(n=200,rate=0.5))
}
Run Code Online (Sandbox Code Playgroud)

否则,对于每个,i您只需计算循环外部定义的固定向量的平均值,而不是每次索引i增加时生成新的向量。有了上面的代码,您可以使用 计算平均值mean(y.exdi),这将为您提供 2000 个“平均值”的平均值。