2017-10-17 38 views
3

或者如何將矢量拆分爲連續成員對並將它們組合到列表中?創建一個列表,其中每個元素是來自給定矢量的一對連續成員

Supose您將得到矢量

map <-seq(from = 1, to = 20, by = 4) 

這是

1 5 9 13 17 

我的目標是創建以下列表

path <- list(c(1,5), c(5,9), c(9,13), c(13,17)) 

這應該代表了幾個路徑段該地圖正在逼迫我們遵循。爲了從1到17,我們首先要走第一條路(path[1]),然後第二條路(path[2]),並一路走到最後。

我第一次嘗試導致我:

path <- split(aux <- data.frame(S = map[-length(map)], E = map[-1]), row(aux)) 

但我認爲這是可能的,而無需創建這個附配的數據幀 ,避免性能下降時的初始向量(map)是很大的。此外,它還會返回一個非常好的警告消息,但我想避免它們。

然後我發現這個在這裏計算器(不完全是這樣的,這是我的問題的改編版):

mod_map <- c(map, map[c(-1,-length(map))]) 
mod_map <- sort(mod_map) 
split(mod_map, ceiling(seq_along(mod_map)/2)) 

這是一個簡單的解決方案,但我不得不使用這個修改後的版本我map

也許我問得太多了,因爲我已經有兩個解決方案。但是,是否有可能擁有第三個解決方案,以便我不像第一個解決方案那樣使用數據框,並且可以使用原始映射,這與我的第二個解決方案不同?

回答

2

我們可以在矢量使用Map(「地圖」 - 最好不要使用函數名 - 這是從purrr函數)與第1和最後一個元素取出並連接的elementwise

Map(c, map[-length(map)], map[-1]) 

或者如@Sotos提到的,split可使用會更快

split(cbind(map[-length(map)], map[-1]), seq(length(map)-1)) 
+3

或者,可以通過'分裂避免'Map'(cbind(地圖[-length(地圖)],地圖[-1]),SEQ( lengt H(地圖)-1))' – Sotos

相關問題