buffer
表示TRUE
之后没有TRUE
可以居住的最小位置。
数据:
vec <- as.logical(c(1,0,1,1,1,0,1,1,0,1))
#[1] TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE
不同缓冲区编号的示例:
buffer = 1
#[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
和
buffer = 2
#[1] TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE
最后
buffer = 3
#[1] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
最佳答案
也许有更好的方法,但是有一个选择,可以遍历TRUE
的vec
值:
changeTRUE <- function(vec, buffer){
first_TRUE <- which(vec)[1] # get the first TRUE value index
i <- 1 # just so we can move on other TRUE values later
while(first_TRUE < length(vec)){ # while there are some TRUE
vec[(first_TRUE+1):min((first_TRUE+buffer), length(vec))] <- FALSE # put FALSE after the TRUE value according to buffer value (but not further than the end of vec)
i <- i+1 # to go to next TRUE
first_TRUE <- which(vec)[i] # get next TRUE index...
}
return(vec)
}
changeTRUE(vec, 1)
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
changeTRUE(vec, 2)
[1] TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE
changeTRUE(vec, 3)
[1] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
关于r - 为TRUE值定义一个“缓冲区”,如果在“缓冲区”内,则将TRUE转换为FALSE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53499885/