给定一个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,则将下一个k=3个x的值设置为零
我用这个可怕的解决方案解决了这个问题。
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
}
有人可以提供更加优雅(功能)的解决方案吗?
感谢任何帮助。
x[3] == 1
,因此x[4:6]
应该结果为0
。但是结果中第六个值是1
。这是有意为之吗?这个规则只适用于在f
中没有被消除的1
吗? - Bernhardx
来说,纯函数式解决方案可能不是最佳选择。 - Bernhard