R如果有其他泵出NAs

R如果有其他泵出NAs,r,for-loop,if-statement,R,For Loop,If Statement,我试图计算向量中类似连续数字的“块”。但我的代码在我期望输入“1”或“0”时,却在回吐“NA” 当它吐出来的时候 0110101 谢谢 如果需要计数序列,可以使用data.table中的rleid library(data.table) rleid(x) 或者使用rlefrombase R with(rle(x), rep(seq_along(values), lengths)) 使用OP的代码,可以预先将“y”指定为长度等于x的向量,然后在“x”序列上循环(而不是“长度”,因为长度只是

我试图计算向量中类似连续数字的“块”。但我的代码在我期望输入“1”或“0”时,却在回吐“NA”

当它吐出来的时候
0110101

谢谢

如果需要计数序列,可以使用
data.table中的
rleid

library(data.table)
rleid(x)

或者使用
rle
from
base R

with(rle(x), rep(seq_along(values), lengths))

使用OP的代码,可以预先将“y”指定为长度等于x的向量,然后在“x”序列上循环(而不是“长度”,因为长度只是一个数字),然后执行
if/else
ifelse
是向量化选项,我们在循环中执行此操作时,只需要
if/else


turing也许这对你有用:

x <- c(1,1,0,1,1,1,0,0,1)
y <- c(0)

turing <- function(x){
  j<- 1
  for (i in x){
    y[j] <- ifelse((x[j] == x[j+1]), 0, 1)
    j <- j+1
  }
  y
}
turing(x)

x我将再添加一个答案,因为之前所有的答案都忽略了函数的酷之处
ifelse
就是我处理整个向量,所以你不需要任何for循环和索引

turing <- function(x){
  ifelse(x[1:length(x)-1] == x[2:length(x)], 0,1)
}
turing(x)

希望这有帮助

谢谢,但是我正试图为这个任务编写一个函数。这让我很难受。在你的函数中,你已经将“y”预先分配给了一个值。即使我没有,同样的事情也会发生
I+1
length(x)
是怎么回事?我如何告诉if/then语句将I值与它旁边的值进行比较?
for(I in length(x))
x的长度仅是一个值为什么?它在R上运行,也许我遗漏了什么?@akrun,请不要误会我,我尊重你以前帮助过我的事实,所以我的问题是为什么它错了。请考虑我也在学习,一个错误可以把我带到一个更好的我,我的意思是你在做作业<代码> y[i]
turing <- function(x){
    y <-  numeric(length(x))
    for (i in seq_along(x)){
    if(i < length(x)) {
      if(x[i] == x[i+1]) {
        y[i]<-0
        } else y[i]<-1
    }}
    y[length(y)] <- 1

    y
  }

turing(x)
#[1] 0 1 1 0 0 1 0 1 1  
x <- c(1,1,0,1,1,1,0,0,1)
y <- c(0)

turing <- function(x){
  j<- 1
  for (i in x){
    y[j] <- ifelse((x[j] == x[j+1]), 0, 1)
    j <- j+1
  }
  y
}
turing(x)
turing <- function(x){
  ifelse(x[1:length(x)-1] == x[2:length(x)], 0,1)
}
turing(x)
ifelse(x == dplyr::lead(x), 0,1)