library(knitr)
library(tikzDevice)

activate_tikz <- function() {

  # tikz plots options
  options(tikzDefaultEngine = "xetex")

  # cash font metrics for speed:
  # options(tikzMetricsDictionary = "./tikz_metrics")

  add_xelatex <- c("\\defaultfontfeatures{Ligatures=TeX, Scale=MatchLowercase}",
                   "\\setmainfont{Linux Libertine O}",
                   "\\setmonofont{Linux Libertine O}",
                   "\\setsansfont{Linux Libertine O}",
        "\\newfontfamily{\\cyrillicfonttt}{Linux Libertine O}",
        "\\newfontfamily{\\cyrillicfont}{Linux Libertine O}",
        "\\newfontfamily{\\cyrillicfontsf}{Linux Libertine O}")

  options(tikzXelatexPackages = c(getOption("tikzXelatexPackages"),
                                  add_xelatex))

  # does remove warnings:
  # it is important to remove fontenc package wich is loaded by default
  options(tikzUnicodeMetricPackages = c("\\usetikzlibrary{calc}",
                                        "\\usepackage{fontspec, xunicode}", add_xelatex))


  opts_chunk$set(dev = "tikz", dev.args = list(pointsize = 11))
}

activate_png <- function() {
  opts_chunk$set(dev = "png", dpi = 300)
}


colFmt <- function(x, color) {
  outputFormat <- opts_knit$get("rmarkdown.pandoc.to")
  if (outputFormat == "latex") {
    result <- paste0("\\textcolor{", color, "}{", x, "}")
  } else if (outputFormat %in% c("html", "epub")) {
    result <- paste0("<font color='", color, "'>", x, "</font>")
  } else {
    result <- x
  }
  return(result)
}

outputFormat <- opts_knit$get("rmarkdown.pandoc.to")


if (outputFormat == "latex") {
  # activateTikz()
  activate_png()
  # другую тему для ggplot2 выставить?
}
library(tidyverse) # рабочие кони
library(sandwich) # оценка Var для гетероскедастичности
library(lmtest) # тест Бройша-Пагана
library(data.table) # манипуляции с данными
library(reshape2) # преобразование длинных таблиц в широкие
library(broom)

Друзья R {#friends_of_R}

Если ты используешь R, то ты поймёшь, что есть куча других полезных программ!

Рабочий процесс {#workflow}

...

Контроль версий {#version_control}

...

Латех {#latex}

...

Маркдаун {#markdown}

...

Воспроизводимые исследования {#reproducible_research}

...

Написание своего пакета {#own_package}

...

Вычисления в облаке {#cloud_computing}

...

Презентации {#presentations}

...

Про эту книжку {#this_book}

Разбить на большее количество глав!!!

Что-то убрать? чтобы была ещё одна книжка? :)

Общие принципы:

  1. Неформальный стиль, на "ты"

  2. Больше картинок. Лицензия?

  3. Больше гипер-ссылок.

  4. Буква ё обязательна.

Пакет bookdown с помощью которого написана эта книжка ещё немного сыроват. В процессе работы я обнаружил, что:

  1. Порой помогает удаление промежуточных файлов и компиляция заново.

  2. После неанглоязычного названия главы обязательно должна идти метка {#label}.

  3. Каждый .Rmd файл содержит только одну главу. Глава обозначается заголовком первого уровня #.

  4. Сослаться на главу или подраздел можно с помощью \@ref(label).

  5. Сослаться на источник литературы можно с помощью [@reference]

  6. Автодобавление пакетов

# automatically create a bib database for R packages
knitr::write_bib(c(
  .packages(), 'bookdown', 'knitr', 'rmarkdown'
), 'packages.bib')

глючит на "M"uller

  1. Для создания MOBI книг:

Под macos:

Поставить менеджер пакетов Homebrewer.

```{bash, "mobi_install", eval=FALSE} brew update brew cask install calibre brew cask install kindlegen

В предисловии
```{bash, "kindlegen_setup", eval=FALSE}
bookdown::kindlegen:
  epub: _book/r_manual.epub

ругается

или ```{bash, "calibre_setup", eval=FALSE} bookdown::calibre: input: _book/r_manual.epub output: _book/r_manual.mobi

ругается

Если надо изобразить yaml в чанке кода, пока пишу, что он bash


7. заставляем травис работать

Создаём новый токен на [github](https://github.com/settings/tokens): кликнуть по иконке пользователя, далее settings - token - generate new token.

```{bash, "github_token", eval=FALSE}
sudo gem install travis
travis encrypt GITHUB_TOKEN=[token from githum]

Именно переменная GITHUB_TOKEN должна использоваться для того, чтобы обращаться к гитхабу, т.е. клонируется ветка gh-pages командой ```{bash, "token_use", eval=FALSE} git clone -b gh-pages https://${GITHUB_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git book-output

Переменная `TRAVIS_REPO_SLUG` будет сама определена сервисом Travis и будет равна названию репозитория.


Добавляем получившуюся закодированную строку в `.travis.yml`. Забавно, что похоже используется рандомный ключ для шифрования и поэтому зашифрованная строка каждый раз выходит разной.

Можно не шифровать её, а добавить в travis-ci.org/user/repo/settings 





Для быстрой компиляции добавляем в `.travis.yml` указание, что мы будем использовать готовые бинарные пакеты R:
```{bash, "binary_packages", eval=FALSE}
r_binary_packages:
  - ggplot2
  - dplyr
  - rio

Для того, чтобы эти опции не были проигнорированы .travis.yml должен содержать строку sudo: required.

Если бинарный пакет слишком старый или вообще отсутствует, можно проинсталлировать его обычным образом, для этого добавляем строки

```{bash, "non_binary_packages", eval=FALSE} r_packages: - devtools - rio

8. Красный шрифт

по мотивам [http://stackoverflow.com/questions/29067541](http://stackoverflow.com/questions/29067541)

```r
colFmt <- function(x, color) {
  outputFormat <- opts_knit$get("rmarkdown.pandoc.to")
  if (outputFormat == "latex") {
    result <- paste0("\\textcolor{", color, "}{", x, "}")
  } else if (outputFormat %in% c("html", "epub")) {
    result <- paste0("<font color='", color, "'>", x, "</font>")
  } else {
    result <- x
  }
  return(result)
}

Then you can use it inline like this: r colFmt("MY RED TEXT", "red")

  1. Файл _output.yaml это просто output: кусок из yaml-части файла index.Rmd. Поэтому можно внести _output.yaml обратно в index.Rmd, чтобы все настройки были в одном месте.

Формально _output.yaml действует на все .Rmd документы в папке, но что там будет кроме учебника в целом. Разве что отдельные главы компилировать :)



bdemeshev/r_manual_book documentation built on May 12, 2019, 3:41 a.m.