要替换的项目的错误数量不是替换长度的倍数

时间:2018-03-07 01:04:09

标签: r

我意识到在其他帖子中触及了这个错误,但我仍然无法弄清楚它是如何适用于我的特定情况的。我有以下代码。

myfun <- function(x, g, o){
  y <- x

  fs <- ((g-1)/o) * (o*g/((g-1)*(1+o)))^g
  xb <- o/(g-1)

  y[x>=xb] <- ((x+o)/(1+o))^g
  y[x<xb] <- x*fs

  return(y)
}

x <- seq(0,1,length=5)
y <- myfun(x, 1.5, 0.05)

我的代码返回以下错误。

Warning messages:
1: In y[y >= xb] <- ((x + o)/(1 + o))^g :
   number of items to replace is not a multiple of replacement length
2: In y[y < xb] <- x * fs :
   number of items to replace is not a multiple of replacement length

此外,结果似乎不正确。

我希望

y = 
    0 0.152720709664243 0.379105500429200 0.665044998814453 1

但得到:

y = 
    [1] 0.00000000 0.01039133 0.15272071 0.37910550 0.66504500

这让我相信我在索引中做了一些不正确的事情,或者在向量x上有数学问题。任何帮助将非常感激。

1 个答案:

答案 0 :(得分:2)

通过构建,x的长度为5,因此y((x+o)/(1+o))^g的长度也为5。

但是,测试x>=xb仅适用于5个中的4个元素,因此y[x>=xb]长度为4个元素。因此,您的分配y[x>=xb] <- ((x+o)/(1+o))^g发生冲突,因为这两个元素的长度不同。

我猜你想做的事情就像是

y[x>=xb] <- ((x[x>=xb]+o)/(1+o))^g
y[x<xb] <- x[x<xb]*fs

我得到了

>y
[1] 0.0000000 0.1527207 0.3791055 0.6650450 1.0000000

这与你想要的很接近,我会让你弄清楚。