2

map次のように、ライブラリからの関数を使用して(ライブラリから)関数purrrを適用しています: segmentedsegmented

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 分かかります。これを速くする方法はありますか?

4

1 に答える 1

5

future_mapの代わりに関数を使用できますmap

この機能はパッケージに含まれており、ファミリfurrrの並列オプションです。パッケージのREADMEmapへのリンクは次のとおりです。

mapあなたのコードの質問は再現できないため、とfuture_map関数の間のベンチマークを準備できません。

future_map関数を使用したコードは次のとおりです。

library(tidyverse)
library(segmented)
library(furrr)


# Data frame stuff....

# Your functions....

# future_map function

# this distribute over the different cores of your computer
# You set a "plan" for how the code should run. The easiest is `multiprocess`
# On Mac this picks plan(multicore) and on Windows this picks plan(multisession)

plan(strategy = multiprocess)

models8_101 <- by_veh28_101 %>% 
  mutate(segs = future_map(data, segf2),
         segsp = future_map(data, segf2p)) 
于 2018-06-09T21:00:23.330 に答える