或者如何将一个矢量分成几对连续成员并将它们组合在一个列表中?
让你得到载体
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
的此修改版本。
答案 0 :(得分:2)
我们可以在向量上使用Map
('map' - 最好不要使用函数名 - 它是来自purrr
的函数),删除第一个和最后一个元素并按元素连接
Map(c, map[-length(map)], map[-1])
或者@Sotos提到,split
可以使用更快
split(cbind(map[-length(map)], map[-1]), seq(length(map)-1))