【问题标题】:Error in writing an algorithm编写算法时出错
【发布时间】:2014-01-19 02:59:12
【问题描述】:

我一直在尝试编写一个算法来生成一些观察结果,但我遇到了一个我不知道如何解决的错误。你可以在下面找到我的代码,如果你需要检查我的算法应该做什么,请咨询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 新年快乐!

【问题讨论】:

  • 可能是for(i in 1:n){ if(w[i]&lt;=1) { x[i] = v1[i] / w[i] } }?然后我会将x初始化为NAs
  • @achingfingers 这是你可以从标签中看到的 R 代码。
  • 同意 Jake 的索引。您可以避免循环: x[w
  • @JakeBurkhead 现在没有这样的错误,但还有些不对劲。不过,这可能是在统计方面。
  • @JakeBurkhead 想通了!写 x

标签: r algorithm statistics simulation


【解决方案1】:

问题是您将向量分配给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]
    }
    

    这也提高了可读性。

【讨论】:

  • 由于我之前没有遇到过 ifelse 命令,您介意告诉括号中的参数代表什么吗?这似乎是一个方便的快捷方式,我想再次使用它。
  • 你看过ifelse的文档吗?使用?ifelse 访问它。如果这不能说明问题,请随时提出新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2011-11-19
  • 2016-12-08
  • 1970-01-01
相关资源
最近更新 更多