我一直在尝试编写算法以生成一些观察结果,但我遇到了一个我不知道如何修复的错误。您可以在下面找到我的代码,如果您需要检查我的算法应该做什么,请参阅此 link .
n = 10
u1 = runif(n)
u2 = runif(n)
alpha = 2
beta = 2
v1 = u1^(1/alpha)
v2 = u2^(1/beta)
w = v1+v2
x = rep(0,n)
for(i in 1:n){ if(w[i] <= 1){x[i] = v1/w}}
Warning messages:
1: In x[i] = v1/w :
number of items to replace is not a multiple of replacement length
您能告诉我如何在不改变算法性质的情况下解决这个问题吗?提前谢谢你。
PS新年快乐!
最佳答案
问题是您将向量分配给 x[i]
,导致出现您看到的错误。你的意思可能是:
for(i in 1:n){ if(w[i] <= 1){x[i] = v1[i]/w[i]}}
可以更好地替换为:
x = ifelse(w <= 1, v1 / w, x)
一些一般性的评论:
for
一般不需要循环,使用向量化。在本例中,使用的是ifelse
。- 使用更长的变量名,这会使您的代码更易于阅读。
- 使用更多的空格,这也使代码更易于阅读。
适当时使用缩进,例如对于
for
循环:for(i in 1:n) { if(w[i] <= 1) x[i] = v1[i] / w[i] }
这也提高了可读性。
关于r - 写算法的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869793/