gpt4 book ai didi

r - R中这个函数的逻辑有什么问题?

转载 作者:行者123 更新时间:2023-12-04 02:37:42 25 4
gpt4 key购买 nike

我正在尝试在 R 中构建一个函数,该函数根据任意索引计算行之间的百分比变化,即任何给定行与前一行或任何给定行与 n 之间的百分比变化前面的。

perc_change <- function(x,n) {
y <- c()
z <- c()
for (i in 1:length(x)) {
z[i] <- (x[i]/(x[i-n])-1)*100
}
y <- c(rep(NA,n),z[(n+1):length(z)])
y
}

n 为 1 时,函数正常工作:

    x <- c(2,3.5,4,6)
perc_change(x,1)

[1] NA 75.00000 14.28571 50.00000

但是当我更改为 2 或其他 n 时,我收到此错误:

Error in z[i] <- (x[i]/(x[i - n]) - 1) * 100 : 
replacement has length zero

我只是找不到我的函数逻辑错误的原因和位置,所以我很感激任何评论或建议。

最佳答案

在循环中,当 n 大于 1 时,从 1 开始的 i 可能导致负数或零索引(即当 n =21 - 2)。为避免,可以添加 if/else 条件

perc_change <- function(x,n) {
y <- c()
z <- c()
for (i in 1:length(x)) {
if(i > n) {
z[i] <- (x[i]/(x[i-n])-1)*100
} else z[i] <- NA
}
y <- c(rep(NA,n),z[(n+1):length(z)])
y
}


perc_change(x,1)
#[1] NA 75.00000 14.28571 50.00000
perc_change(x, 2)
#[1] NA NA 100.00000 71.42857
perc_change(x, 3)
#[1] NA NA NA 200

关于r - R中这个函数的逻辑有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60895365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com