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