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

R 要替换的项的错误数不是替换长度的倍数,r,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,len

我意识到这个错误在其他帖子中也提到过,但我仍然不知道它如何适用于我的特殊情况。我有以下代码

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)
但是你可以得到:

y = 
    [1] 0.00000000 0.01039133 0.15272071 0.37910550 0.66504500

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

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


但是,测试
x>=xb
仅对5个元素中的4个元素有效,因此
y[x>=xb]
长度为4个元素。因此,通过构造,您的赋值
y[x>=xb],
x
的长度为5,因此
y
((x+o)/(1+o))^g的长度也为5


但是,测试
x>=xb
仅对5个元素中的4个元素有效,因此
y[x>=xb]
长度为4个元素。因此,您的任务
y[x>=xb]谢谢您。。。这是正确的。当你的答案出现时,我自己就想出来了,但我感谢你的确认和对原因的完整描述。另一个选择是使用ifelse函数。谢谢你。。。这是正确的。当你的答案出现时,我自己就想出来了,但我很感谢你的确认和对原因的完整描述。另一个选择是使用ifelse函数。
y = 
    0 0.152720709664243 0.379105500429200 0.665044998814453 1
y = 
    [1] 0.00000000 0.01039133 0.15272071 0.37910550 0.66504500
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