Как закрыть окно обновления загруженных пакетов при установке пакета R в RStudio? - PullRequest
0 голосов
/ 28 ноября 2018

Как отключить / отключить всплывающее окно «Обновление загруженных пакетов», которое отображается при установке пакета R?Я рад, что для него установлено значение «Нет», но я не знаю, как заставить его работать (исследовал install.packages() аргументы и выполнил поиск в Google, но не обнаружил).

Справочная информация: моя цель - сравнить время установки большой (2k) коллекции пакетов.Я хочу сделать это в одночасье в цикле, где на каждой итерации: (1) я удаляю все пакеты, кроме base, (2) я измеряю время установки конкретного пакета.У меня не должно быть всплывающих окон (которые останавливают процесс), чтобы сделать это.

sessionInfo при запуске RStudio:

> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS  10.14

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.5.1 tools_3.5.1   
> 

enter image description here

1 Ответ

0 голосов
/ 28 ноября 2018

Вам следует подумать о том, чтобы использовать что-то похожее:

#!/bin/bash

# Create file of all installed packages

Rscript -e 'writeLines(unname(installed.packages()[,1]), "installed-pkgs.txt")'

# Iterate over the file, benchmarking package load 3x (consider bumping this up)

while read -r pkg; do

  echo -n "Benchmarking package [${pkg}]"

  for iter in {1..3}; do

    echo -n "."

    Rscript --vanilla \
      -e 'args <- commandArgs(TRUE)' \
      -e 'invisible(suppressPackageStartupMessages(xdf <- as.data.frame(as.list(system.time(library(args[1], character.only=TRUE), FALSE)))))' \
      -e 'xdf$pkg <- args[1]' \
      -e 'xdf$iter <- args[2]' \
      -e 'xdf$loaded_namespaces <- I(list(loadedNamespaces()))' \
      -e 'saveRDS(xdf, file.path("data", sprintf("%s-%s.rds", args[1], args[2])))' \
      "${pkg}" \
      "${iter}"

  done

  echo ""

done <installed-pkgs.txt

Я создал каталог ~/projects/pkgbench с подкаталогом data и поместил ^^ в ~/projects/pkgbench.С его помощью вы:

  • получаете чистый (ванильный) R-сеанс при каждом запуске
  • 3 итерации для каждого (увеличьте его, если хотите)
  • один файл RDSза каждую итерацию
  • количество пакетов (включая имена) в пост-загрузке пространства имен сеанса в файлах RDS

Когда он запускается (из сеанса терминала не-RStudio на вашемокно macOS) вы получаете прогресс (одна точка за итерацию):

$ ./pkgbench.sh
Benchmarking package [abind]...
Benchmarking package [acepack]...
Benchmarking package [AER]...
Benchmarking package [akima]...

Затем вы можете сделать что-то вроде (я убил тест после нескольких pkgs):

library(hrbrthemes) # github/gitlab
library(tidyverse)

map_df(
  list.files("~/projects/pkgbench/data", full.names = TRUE),
  readRDS
) %>% tbl_df() %>% print() -> bench_df
## # A tibble: 141 x 8
##    user.self sys.self elapsed user.child sys.child pkg     iter  loaded_namespaces
##        <dbl>    <dbl>   <dbl>      <dbl>     <dbl> <chr>   <chr> <list>           
##  1   0.00500 0.00100  0.00700         0.        0. abind   1     <chr [9]>        
##  2   0.00600 0.00100  0.00700         0.        0. abind   2     <chr [9]>        
##  3   0.00600 0.00100  0.00600         0.        0. abind   3     <chr [9]>        
##  4   0.00500 0.00100  0.00600         0.        0. acepack 1     <chr [9]>        
##  5   0.00600 0.001000 0.00800         0.        0. acepack 2     <chr [9]>        
##  6   0.00500 0.00100  0.00600         0.        0. acepack 3     <chr [9]>        
##  7   1.11    0.0770   1.19            0.        0. AER     1     <chr [36]>       
##  8   1.04    0.0670   1.11            0.        0. AER     2     <chr [36]>       
##  9   1.07    0.0720   1.15            0.        0. AER     3     <chr [36]>       
## 10   0.136   0.0110   0.147           0.        0. akima   1     <chr [12]>       
## # ... with 131 more rows

group_by(bench_df, pkg) %>% 
  summarise(
    med_elapsed = median(elapsed), 
    ns_ct = length(loaded_namespaces[[1]])
  ) -> bench_sum

ggplot(bench_sum, aes("elapsed", med_elapsed)) +
  geom_violin(fill = ft_cols$gray) +
  ggbeeswarm::geom_quasirandom(color = ft_cols$yellow) +
  geom_boxplot(color = "white", fill="#00000000", outlier.colour = NA) +
  theme_ft_rc(grid="Y")

enter image description here

ggplot(bench_sum, aes(ns_ct, med_elapsed)) +
  geom_point(color = ft_cols$yellow) +
  geom_smooth(color = ft_cols$peach) + # shld prbly use something better than loess
  theme_ft_rc(grid = "XY")

enter image description here

Если вы собираетесь запустить его в одночасье, убедитесь, что вы отключили все «сонные / холостые»"время, которое macOS может сделать для вас (например, отключить любые тяжелые заставки, запретить перевести диски в спящий режим и т. д.).

Обратите внимание, что я запретил печатать сообщения о запуске пакета.Вы можете вместо этого capture.output() или провести сравнение с этим и без него.

library() также имеет все эти параметры:

library(
  package, 
  help, 
  pos = 2, 
  lib.loc = NULL,
  character.only = FALSE, 
  logical.return = FALSE,
  warn.conflicts = TRUE, 
  quietly = FALSE,
  verbose = getOption("verbose")
)

Вы можете настроить их для различныхТестирование также выполняется.

Я также смотрел только на медиану «что чувствовал пользователь при загрузке пакета» .Подумайте о проверке всех значений system.time, которые находятся во фрейме данных.

Если ваш Mac достаточно мощен по процессору и у вас быстрый твердотельный диск, вы могли бы рассмотрите возможность использования GNU parallel с этим жгутом для ускорения времени.Я бы определенно использовал более 3 итераций для каждого пакета, если вы сделаете это и будете достаточно консервативны с количеством параллельных параллельных прогонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...