gpt4 book ai didi

r - 当此值等于 1 时,将下 n 个值设置为零

转载 作者:行者123 更新时间:2023-12-03 23:11:45 24 4
gpt4 key购买 nike

给定一个 0/​​1 向量和一个 k 值

x <- c(0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1)
k <- 3
我需要定义一个函数 f 以便
f(x, k)
[1] 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0
即:如果 x = 1 的任何值设置 x 的下一个 k = 3 值为零
我已经用这个可怕的解决方案解决了这个问题
f <- function(x, k){

.f <- function(x, i, k){

s <- seq(i+1, i+k)
if (x[[i]] == 1) x[s] <- 0
x
}

n <- length(x)
for ( i in seq(1, n-1)) {
#for ( i in seq(1, n-k-1)) {
x <- .f(x, i , k)
}

length(x) <- n
x
}
谁能提供更优雅(功能性)的解决方案?
谢谢你的帮助

最佳答案

这需要一些步骤:

foo <- function(x, k) {
n <- length(x)
for (i in seq_along(x)) {
if (x[i] == 1) x[seq(i+1L, min(i+k, n))] <- 0
}
x
}

foo(x, k)
# [1] 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0
这在遇到 1 时需要更大的步骤。 , 至少对于大型 k 应该更有效.
foo2 <- function(x, k) {
n <- length(x)
i <- 1L
while (i < n) {
if (x[i] == 1) {
x[seq(i+1L, min(i+k, n))] <- 0
i <- i+k
} else {
i <- i+1L
}
}
x
}

关于r - 当此值等于 1 时,将下 n 个值设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62598257/

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