我一直试图写一个算法,以产生一些观察,但我面临一个错误,我不知道如何修复。您可以在下面找到我的代码,如果您需要检查我的算法应该做什么,请咨询这个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你能告诉我如何在不改变算法性质的情况下解决这个问题吗?提前谢谢你。
祝大家新年快乐!
发布于 2014-01-01 16:59:17
问题是,您为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循环:
对于(i in 1:n) { if(wi <= 1) xi = v1i / wi }
这也提高了可读性。https://stackoverflow.com/questions/20869793
复制相似问题