2015-05-26 3 views
3

В конце книги R я хотел бы показать версии основных пакетов R, используемых для компиляции книги. Я интересно, если есть что-то я мог бы сделать лучше, чем просто использовать sessionInfo() в куске, например,Колофон для книги R

\section*{Colophon} 
This book was produced using \Sexpr{R.version.string}, 
\pkg{knitr} (\Sexpr{packageDescription("knitr")[["Version"]]}) 
and other package versions listed below. 

<<session-info, size='footnotesize',R.options=list(width=90)>>= 
print(sessionInfo(), locale = FALSE) 
@ 

В частности, sessionInfo() перечислены все пакеты загружаются косвенно, а также загруженные непосредственно.

ответ

3
```{r} 
library(knitr) 
p = devtools::loaded_packages() 
p$version = unlist(lapply(p$package, function(x) as.character(packageVersion(x)))) 
kable(p[order(p$package),], row.names=FALSE) 
``` 

Если у вас нет DevTools установлены, украсть код с loaded_packages.

2

Это даст запятую список пакетов, загруженных в текущем сеансе:

pkgs <- sort(sub("package:", "", grep("package:", search(), value = TRUE))); 
toString(Map(function(p) sprintf("%s (%s)", p, packageVersion(p)), pkgs)) 

давая эту строку, вы можете вставить, поместив код, указанный выше в \Sexpr:

[1] "base (3.2.0), datasets (3.2.0), graphics (3.2.0), grDevices (3.2.0), methods (3.2.0), stats (3.2.0), utils (3.2.0)" 

В этом коде используются только основные функции R.

0

Я не хочу перечислять все загруженные пакеты (базовые пакеты, зависимости) в текущем сеансе, поэтому я придумал лучшее решение для своих нужд. Может быть, это будет полезно кому-то другому.

  1. Найти все пакеты явно загруженные через library() в файлах .Rnw для книги.

  2. Использование devtools:::package_info() для форматирования

For (1.), я использовал следующую трубу команд оболочки, все стандартные для моего верного tcgrep PERL скрипт кроме того, что найти строки в файлах рекурсивно

tcgrep -E Rnw '^library(.*)' . \ 
    | grep '/ch' \ 
    | perl -p -e 's/^.*://; s/\s*#.*//' \ 
    | perl -p -e 's/library\(([\w\d]+)\)/"$1"/g; s/;/, /' \ 
    | sort -u | perl -p -e 's/\n/, /' > packages-used.R 

Это дало мне

packages <- c(
"AER", "ca", "car", "colorspace", "corrplot", "countreg", "directlabels", "effects", "ggparallel", "ggplot2", "ggtern", "gmodels", "gnm", "gpairs", "heplots", "Lahman", "lattice", "lmtest", "logmult", "MASS", "MASS", "countreg", "mgcv", "nnet", "plyr", "pscl", "RColorBrewer", "reshape2", "rms", "rsm", "sandwich", "splines", "UBbipl", "vcd", "vcdExtra", "VGAM", "xtable") 

Тогда для (2),

library(devtools) 
pkg_info <- devtools:::package_info(packages) 
# clean up unwanted 
pkg_info$source <- sub(" \\(R.*\\)", "", pkg_info$source) 
pkg_info <- pkg_info[,-2] 

pkg_info 

Мне нравится результат, потому что он также идентифицирует не-КРАН (разрабатываемая версия) пакеты. Я мог бы также отформатировать это с kable:

> pkg_info 
package  version date  source 
AER   1.2-3  2015-02-24 CRAN 
ca   0.60  2015-03-01 R-Forge 
car   2.0-25 2015-03-03 R-Forge 
colorspace 1.2-6  2015-03-11 CRAN 
corrplot  0.73  2013-10-15 CRAN 
countreg  0.1-2  2014-10-17 R-Forge 
directlabels 2013.6.15 2013-07-23 CRAN 
effects  3.0-4  2015-03-22 R-Forge 
ggparallel 0.1.1  2012-09-09 CRAN 
ggplot2  1.0.1  2015-03-17 CRAN 
ggtern  1.0.5.0 2015-04-15 CRAN 
gmodels  2.15.4.1 2013-09-21 CRAN 
gnm   1.0-8  2015-04-22 CRAN 
gpairs  1.2  2014-03-09 CRAN 
heplots  1.0-15 2015-04-18 CRAN 
Lahman  3.0-1  2014-09-13 CRAN 
lattice  0.20-31 2015-03-30 CRAN 
lmtest  0.9-33 2014-01-23 CRAN 
logmult  0.6.2  2015-04-22 CRAN 
MASS   7.3-40 2015-03-21 CRAN 
mgcv   1.8-6  2015-03-31 CRAN 
nnet   7.3-9  2015-02-11 CRAN 
plyr   1.8.2  2015-04-21 CRAN 
pscl   1.4.9  2015-03-29 CRAN 
RColorBrewer 1.1-2  2014-12-07 CRAN 
reshape2  1.4.1  2014-12-06 CRAN 
rms   4.3-1  2015-05-01 CRAN 
rsm   2.7-2  2015-05-13 CRAN 
sandwich  2.3-3  2015-03-26 CRAN 
UBbipl  3.0.4  2013-10-13 local 
vcd   1.4-0  2015-04-20 local 
vcdExtra  0.6-8  2015-04-16 CRAN 
VGAM   0.9-8  2015-05-11 CRAN 
xtable  1.7-4  2014-09-12 CRAN 
0

Если вы используете LaTeX вы могли бы просто генерировать список литературы для всех пакетов с помощью:

%% begin.rcode каучука, результаты = «ASIS», кэш = FALSE

% write_bib (файл = "generated.bib")

%% end.rcode

Вы можете поместить это после того, как ваш \ {конец документа} и добавить соответствующая запись \ bibliography {mybib, generated}. Таким образом, вы также можете ссылаться на них с помощью обычного \ cite {}

+0

Я уже делаю это, но через латексную команду '\ pkg {}', которая печатает имя пакета, а также генерирует команду '\ cite {}'.Но colophon служит другой цели - указать в одном месте версии пакета, используемые в тексте. – user101089

Смежные вопросы