r - 写算法的错误

标签 r algorithm statistics simulation

我一直在尝试编写算法以生成一些观察结果,但我遇到了一个我不知道如何修复的错误。您可以在下面找到我的代码,如果您需要检查我的算法应该做什么,请参阅此 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/

相关文章:

r - 如何从 Amelia 包中提取完整的数据集

r - 更新数据框的子集

r - 列出 Shiny 的下拉列表selectInput

c - 使用邻接矩阵的 Dijkstra 算法

algorithm - Bully 算法 - 检测失败

python - 仅将 Gamma 分布拟合到样本的子集

machine-learning - 特征归一化

javascript - 使用 javascript 通过 WebSockets 连接到 Rserve

c++ - 验证和中缀表达式

c++ - Armadillo 'cor' 函数返回标量