2014-11-20 61 views
0

我有興趣創建一個序列向量,全部從0到1,但是對seq()有不同的「by」參數。用不同的「by」參數創建一個序列向量

我先從我希望使用的「通過」的說法矢量:

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

,我想這是輸入序列()函數:

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?

+0

呀,你」我們需要一個循環,因爲'seq'只會產生等間距的值。但它是一個簡單的循環:'myseq <-vector();對於(i in 1:length(x))myseq <-c(myseq,seq(0,1,by = 1 /(x [j] -1)))''(未測試) – 2014-11-20 22:13:59

回答

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 
0

下面的代碼會是怎樣的一個例子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 
2

另一種方法:我用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 
相關問題