【问题标题】:Create a vector of sequences with varying "by" arguments创建具有不同“by”参数的序列向量
【发布时间】:2015-01-18 22:59:48
【问题描述】:

我有兴趣创建一个序列向量,从 0 到 1,但 seq() 的“by”参数不同。

我从一个希望用于“by”参数的向量开始:

x <- c(3,6,3,9,10)

我希望这是 seq( ) 函数的输入:

seq(0, 1, by = 1/(x-1))

所以对于向量的前几个元素,它将是:

seq(0, 1, by = 1 / (3 - 1))
seq(0, 1, by = 1 / (6 -1))

产生向量,例如:

0.0 0.5 1.0
0.0 0.2 0.4 0.6 0.8 1.0

最终,我希望输出是一个长向量,其中包含所有这些不同长度的序列。也许是一个循环的工作?还是 sapply / lapply?

【问题讨论】:

  • 是的,你需要一个循环,因为seq 只生成等间距的值。但这是一个简单的循环:myseq&lt;-vector(); for(i in 1:length(x)) myseq&lt;-c(myseq,seq(0,1,by=1/(x[j]-1)))(未测试)

标签: r vector


【解决方案1】:

另一种方式:我使用seq.default,因为您需要对by 参数进行矢量化

x <- c(3,6,3,9,10)

vseq <- Vectorize(seq.default)

vseq(0, 1, by = 1/(x-1))

# [[1]]
# [1] 0.0 0.5 1.0
# 
# [[2]]
# [1] 0.0 0.2 0.4 0.6 0.8 1.0
# 
# [[3]]
# [1] 0.0 0.5 1.0
# 
# [[4]]
# [1] 0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000
# 
# [[5]]
# [1] 0.0000000 0.1111111 0.2222222 0.3333333 0.4444444 0.5555556 0.6666667 0.7777778
# [9] 0.8888889 1.0000000

【讨论】:

    【解决方案2】:

    下面是示例 x = 1000 的代码

    vector_x <- c()
    for(i in 1:1000){
    
      x <- seq(0, 1, by = 1/(i-1))
      vector_x <- c(vector_x, x)
    
    }
    
    vector_x
    

    【讨论】:

      【解决方案3】:
      sapply(1/(x-1), seq, from=0, to=1)
      
      [[1]]
      [1] 0.0 0.5 1.0
      
      [[2]]
      [1] 0.0 0.2 0.4 0.6 0.8 1.0
      
      [[3]]
      [1] 0.0 0.5 1.0
      
      [[4]]
      [1] 0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000
      
      [[5]]
       [1] 0.0000 0.1111 0.2222 0.3333 0.4444 0.5556 0.6667 0.7778 0.8889 1.0000
      

      【讨论】:

        猜你喜欢
        • 2018-09-10
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 2019-08-01
        • 1970-01-01
        相关资源
        最近更新 更多