创建一个列表,其中每个元素是来自给定矢量的一对连续成员
问题描述:
或者如何将矢量拆分为连续成员对并将它们组合到列表中?创建一个列表,其中每个元素是来自给定矢量的一对连续成员
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
。
也许我问得太多了,因为我已经有两个解决方案。但是,是否有可能拥有第三个解决方案,以便我不像第一个解决方案那样使用数据框,并且可以使用原始映射,这与我的第二个解决方案不同?
答
我们可以在矢量使用Map
(“地图” - 最好不要使用函数名 - 这是从purrr
函数)与第1和最后一个元素取出并连接的elementwise
Map(c, map[-length(map)], map[-1])
或者如@Sotos提到的,split
可使用会更快
split(cbind(map[-length(map)], map[-1]), seq(length(map)-1))
或者,可以通过'分裂避免'Map'(cbind(地图[-length(地图)],地图[-1]),SEQ( lengt H(地图)-1))' – Sotos