What are examples of when seq_along works, but seq produces unintended results?

前端 未结 2 1490
终归单人心
终归单人心 2020-12-12 12:56

What are good examples of when seq_along will work, but seq will produce unintended results?

From the documentation of ?seq we

相关标签:
2条回答
  • 2020-12-12 13:32

    This should make the difference clear. Basically, seq() acts like seq_along() except when passed a vector of length 1, in which case it acts like seq_len(). If this ever once bites you, you'll never use seq() again!

    a <- c(8, 9, 10)
    b <- c(9, 10)
    c <- 10
    
    seq_along(a)
    # [1] 1 2 3
    seq_along(b)
    # [1] 1 2
    seq_along(c)
    # [1] 1
    
    seq(a)
    # [1] 1 2 3
    seq(b)
    # [1] 1 2
    seq(c)
    # [1]  1  2  3  4  5  6  7  8  9 10
    

    It's probably worth noting that sample() exhibits similarly crummy behavior:

    sample(a)
    # [1] 10  8  9
    sample(b)
    # [1]  9 10
    sample(c)
    # [1]  8  7  9  3  4  1  6 10  2  5
    
    0 讨论(0)
  • 2020-12-12 13:40

    If the input to seq is length 1 then the outputs between seq and seq_along will be different

    x <- 5
    for(i in seq(x)){
        print(x[i])
    }
    #[1] 5
    #[1] NA
    #[1] NA
    #[1] NA
    #[1] NA
    
    for(i in seq_along(x)){
        print(x[i])
    }
    #[1] 5
    

    We also see a difference if the input is a vector of Dates

    x <- Sys.Date() + 1:5
    seq(x)
    #Error in seq.Date(x) : 'from' must be of length 1
    seq_along(x)
    #[1] 1 2 3 4 5
    
    0 讨论(0)
提交回复
热议问题