簡體   English   中英

創建一個列表,其中每個元素都是來自給定向量的一對連續成員

[英]Create a list where each element is a pair of contiguous members from given vector

或者如何將一個矢量分成幾對連續成員並將它們組合在一個列表中?

讓你得到矢量

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 )變大時避免性能下降,那么這是可能的。 此外,它返回一條很好的警告信息,但我想避免它們。

然后我在stackoverflow上找到了這個(不完全像這樣,這是我的問題的改編版本):

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

這是一個更簡單的解決方案,但我必須使用我的map這個修改版本。

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

我們可以在向量上使用Map ('map' - 最好不要使用函數名 - 它是purrr的函數),刪除第一個和最后一個元素並連接元素

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

或者正如@Sotos所提到的,可以使用更快的split

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM