儘管標題相似,但這與Vectorizing rep and seq in R不一樣。矢量化seq的優雅方法?
我的近期目標:給定一個載體,我想生成包含舊值每個值之間的原始值加上定期間隔地一個新的載體。這並不困難。
一種策略是使用更一般的函數,給定兩個向量和指定的間隔,使用相同的by
值重複將seq應用於兩個原始向量中的數字對。我還沒有找到這樣做的內置函數。 seq
似乎對作爲參數處理向量有抵觸性。這裏是執行更一般的操作(這我就可以用我的燃眉之急)功能:
multiseq <- function(froms, tos, by){
x <- c();
for (i in seq_along(froms)){
x <- c(x, seq(from=froms[i], to=tos[i], by=by))
}
x
}
例如:
> multiseq(1:2, 1.75:2.75, .25)
[1] 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75
(這只是一個簡單的例子,我真的想要的是具有任意序列做到這一點,如
-0.89115386 -0.75346155 -0.61576924 -0.47807693 -0.34038463 -0.20269232 -0.06500001 0.07269230 0.21038460 0.34807691 0.48576922 0.62346153 0.76115383
我想每個區間的細分成五,創建具有5倍多元素的新序列。)
只要序列不太長,我相信反覆擴展載體不應該太慢。如果我需要大量序列,我可以重寫預擴展向量並填充它。但是,它仍然讓我完全用循環做到這一點。是否有更優雅的功能性編程R-ly方式?
謝謝。
我沒有得到你想要的seq(1,2.75,by = .25)'做同樣的事情? – 2013-04-10 04:59:19
謝謝@TylerRinker。我已編輯澄清。呃,但現在我想到了,你說得對。我只是沒有正確地考慮它。對於新的例子,我可以使用'seq(-0.89115386,0.76115383,0.176923/5)'。我也意識到我可以使用'c(mapply(seq,firstseq,secondseq,MoreArgs = list(by = 0.1376923/5))'。不確定是撤消還是回答 – Mars 2013-04-10 05:08:42
回答並接受你的回答,它是完全有效的(雖然你將不得不等待幾天才能接受它),我只是想提出同樣的事情。'multiseq < - function(froms,tos,...)as.vector(mapply(seq ,froms,tos,...))',然後執行'multiseq(froms,tos,by = 0.1)'(說) – 2013-04-10 05:10:22