我正在使用purrr
库中的map
函数来应用segmented
函数(来自segmented
库),如下所示:
library(purrr)
library(dplyr)
library(segmented)
# Data frame is nested to create list column
by_veh28_101 <- df101 %>%
filter(LCType=="CFonly", Lane %in% c(1,2,3)) %>%
group_by(Vehicle.ID2) %>%
nest() %>%
ungroup()
# Functions:
segf2 <- function(df){
try(segmented(lm(svel ~ Time, data=df), seg.Z = ~Time,
psi = list(Time = df$Time[which(df$dssvel != 0)]),
control = seg.control(seed=2)),
silent=TRUE)
}
segf2p <- function(df){
try(segmented(lm(PrecVehVel ~ Time, data=df), seg.Z = ~Time,
psi = list(Time = df$Time[which(df$dspsvel != 0)]),
control = seg.control(seed=2)),
silent=TRUE)
}
# map function:
models8_101 <- by_veh28_101 %>%
mutate(segs = map(data, segf2),
segsp = map(data, segf2p))
对象by_veh28_101
包含2457个tibbles
。最后一步,使用map
函数,需要16分钟才能完成。有什么方法可以让它更快吗?
2条答案
按热度按时间azpvetkf1#
您可以使用函数
future_map
而不是map
。此函数来自
furrr
软件包,是map
系列的并行选项。下面是该软件包README的链接。因为您的代码质疑它是不可复制的,所以我无法准备
map
和future_map
函数之间的基准测试。使用
future_map
函数的代码如下:mum43rcc2#
好了,刚才我用一些简单的
Rcpp
重写了一个purrr::map
循环(通过一些逻辑测试过滤列表中〉40,000个向量元素)。以前它不能在〉2分钟内完成;但现在它在几秒钟内完成运行(准确地说,大约2~3秒)。仅供参考。