поиск sth с циклами путем индексации в R - PullRequest
0 голосов
/ 05 мая 2020

Создайте для l oop, который проверяет, имеет ли вектор numeri c хотя бы два нуля подряд. Если это так, он печатает позицию (индекс) первого нуля.

1 Ответ

1 голос
/ 05 мая 2020

Вот версия с использованием rle + inverse.rle

findConZeros <- function(x) {
  u <- rle(unlist(strsplit(as.character(x),""))==0)
  u$values <- with(u,lengths>=2&values)
  which(inverse.rle(u))
}

, так что

> findConZeros(1200011)
[1] 3 4 5

> findConZeros(40400)
[1] 4 5

Ниже представлена ​​версия for l oop

findConZeros_forloop <- function(x) {
  s <- unlist(strsplit(as.character(x),""))
  res <- c()
  for (i in seq_along(s)) {
    if (all(s[i:(i+1)]=="0") & i < length(s)) res <- c(res,i,i+1)
  }
  unique(res)
}

что дает

> findConZeros_forloop(1200011)
[1] 3 4 5

> findConZeros_forloop(40400)
[1] 4 5
...