2017-05-05 6 views
0

챔피언 모델을 식별하기 위해 수십 개의 예측 모델을 구축 중입니다. 기가 바이트의 데이터로 작업하므로 런타임 추적이 중요합니다.여러 모델과 실행 시간 관리 R

모든 모델을 목록 형식 형식으로 작성하여 지구 환경 내의 모든 다른 모델 이름을 관리 할 필요가 없습니다. 그러나 모델 당 타이밍을 얻는 유일한 방법은 별도의 명명 된 개체를 갖는 것입니다.

여기에 내가 무엇을 찾고 접근하는 기본적인 방법이다 : 그러나

library(tidyverse) 

# Basic Approach 

Time_1 <- system.time(
    Model_1 <- lm(am ~ disp, mtcars) 
) 

Time_2 <- system.time(
    Model_2 <- lm(am ~ disp + cyl, mtcars) 
) 

# etc. for dozens more 

Time_List <- 
    mget(ls(pattern = "Time")) %>% 
    bind_rows() 

, 당신은 내가 수동으로 각 모델 및 시간 기록 이름을 가지고 볼 수 있습니다. 내가 찾고있는 것은 "xxx"가 실행 시간의 실제 레코드 인 다음 코드로 생성 된 테이블과 비슷한 것이다.

# Tribble Output 
tribble(
    ~Model_Name, ~Model_Function, ~Run_Time, 
    "Model_1", lm(am ~ disp, mtcars), "xxx", 
    "Model_2", lm(am ~ disp + cyl, mtcars), "xxx" 
) 

# A tibble: 2 × 3 
    Model_Name Model_Function Run_Time 
     <chr>   <list> <chr> 
1 Model_1  <S3: lm>  xxx 
2 Model_2  <S3: lm>  xxx 

사용 된 패키지에 관계없이 입력 사항을 알려 주시면 감사하겠습니다.

답변

1

system.time 범위 내에서 할당하면 계산 시간과 시간을 절약 할 수 있습니다. 당신이 목록 컬럼에 결과를 할당하는 경우, 당신은 그것을 압축을 풀 수 있습니다

library(tidyverse) 

data_frame(formula = c(mpg ~ wt, mpg ~ wt + hp)) %>% 
    mutate(model_time = map(formula, ~{ 
       time <- system.time(model <- lm(.x, mtcars)); 
       lst(model, time) 
      }), 
      model = map(model_time, 'model'), 
      time = map(model_time, 'time')) %>% 
    select(-model_time) 
#> # A tibble: 2 × 3 
#>   formula model   time 
#>   <list> <list>   <list> 
#> 1 <S3: formula> <S3: lm> <S3: proc_time> 
#> 2 <S3: formula> <S3: lm> <S3: proc_time> 

때문에 열 모두 여전히 많은처럼 보이지 않는 나열하지만 모든 데이터가 지금 할 수 있습니다 추가 추출.

동등한 대안 :

data_frame(formula = c(mpg ~ wt, mpg ~ wt + hp)) %>% 
    mutate(model_time = map(formula, ~{ 
       time <- system.time(model <- lm(.x, mtcars)); 
       data_frame(model = list(model), 
          time = list(time)) 
      })) %>% 
    unnest(model_time) 
+0

좋아! 나는 더 이상 일하고 있지 않지만 돌아 오면 조사 할 것입니다. –