我意识到在其他帖子中触及了这个错误,但我仍然无法弄清楚它是如何适用于我的特定情况的。我有以下代码。
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上有数学问题。任何帮助将非常感激。
答案 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
这与你想要的很接近,我会让你弄清楚。