Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R. Страница 4

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

  • R4marketing | канал Алексея Селезнёва | Язык R

    Создаем простую диаграмму в R (ggplot2 & esquisse) Автор: Максим рожков Небольшой видео урок по созданию графиков в R с помощью пакетов ggplot2 и esquisse. Пакет esquisse предоставляет вам Addon для RStudio "ggplot2 builder", который является графическим интерфейсом для генерация кода построения ggplot графиков. Пример работы Addon на изображении к посту. #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Язык R Studio: основы работы для аналитики | Ч.1 Автор: Андрей Щербаченко (@andreysmka) Описание: Мы рассмотрим основы использования R Studio для проведения анализа данных, от импорта данных до проведения статистического анализа. К концу этого видео у вас будет основа, на которой вы сможете развить свои навыки анализа данных! #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Top постов за ноябрь 2022 По пересылкам: 1. Запись курса по R от Ивана Позднякова 2. Трюки ggplot2: агрегирование 3. Аналоги пакетов на R и Python 4. Обзор научно-издательской системы Quarto 5. Важно ли DS аналитику знать про software development? По просмотрам: 1. Запись курса по R от Ивана Позднякова 2. Видео урок "R Studio. Урок 4. Базовые манипуляции." 3. Игра крестики - нолики на R 4. Важно ли DS аналитику знать про software development? 5. Построение Bump Charts в ggplot2 По реакциям: 1. Запись курса по R от Ивана Позднякова 2. Добавляем вкладки в Rmarkdown файлы 3. Параметризация rmarkdown файлов 4. Игра "Найди слова" на R 5. Важно ли DS аналитику знать про software development? #top
  • Реклама

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Генерация случайных наборов данных в R Пакет wakefield предоставляет удобный интерфейс для генерации наборов данных. Ядром пакета является функция r_data_frame(), которая создаёт таблицу со случайными данными. Внутри этой функции с помощью аргумента n, вы указываете необходимое количество наблюдений (строк), и далее используете 49 дополнительных функций, для генерации различных переменных (столбцов). Список функций для генерации переменных: ● age - возраст ● animal - животное ● answer - ответ на вопрос (да / нет) ● area - тип населённого пункта, пригород, город, село ● car - марка машины ● children - к-во детей ● coin - монета (орёл / решка) ● color - цвет ● date_stamp - дата ● death - логический вектор смертей ● dice - бросок игрового кубика ● dna - ДНК (Гуанин, Аденин, Тимин, Цитозин) ● dob - Дни рождения ● dummy - Случайный фиктивный закодированный (0/1) вектор ● education - Уровень образования ● employment - Тип занятости ● eye - Цвет глаз ● grade - Рейтинг ● grade_level - Cлучайный вектор уровней оценок. ● group - Вектор бинарных групп (например, контроль/лечение) ● hair - Цвет волос ● height - Рост ● income - доход ● internet_browser - Интернет браузер ● iq - Уроыень IQ ● language - Язык ● level -Случайный вектор целочисленных уровней ● likert - Случайный вектор ответов типа Лайкерта. ● lorem_ipsum - (псевдо) случайный текст lorem ipsum ● marital - Семейный статус ● military - Вектор родов войск ● month - Название месяца ● name - Имя ● normal - Нормальное распределение ● political - Вектор политических партий ● race - Раса ● religion - Регион ● sat - Генерация случайного нормального вектора теста на школьные способности (SAT) ● sentence - Предложение ● sex - Пол ● sex_inclusive - Вектор небинарных полов ● smokes - Логическое, курит или нет ● speed - Скорость ● state - Штат США ● string - Случайная строка символов ● upper - Случайная буква ● valid - Логическое истина или ложь ● year - Год ● zip_code - Почтовый индекс Так же вы можете передавать собственные функции, генерирующие векторы, единственное условие, данная функция должна иметь аргумент n, ограничивающий длину генерируемого вектора. Пример генерации выборки:
     
    library(wakefield)
    library(dplyr)
    
    # функция генерации отделов
    department <- function(
        n, 
        x = c("Sales", "Marketing", "Developores", "Finance", "Managment"), 
        prob = c(0.5, 0.2, 0.1, 0.15, 0.05), 
        name = "Department") 
    {
      if (missing(n)) stop("`n` is missing")
      out <- sample(x = x, size = n, replace = TRUE, prob = prob)
      out <- factor(out, levels = x)
      varname(out, name)
    }
    
    # генерируем табдицу сотрудников
    staff <- r_data_frame(
      n = 60,
      id,
      name,
      gender,
      age,
      employment,
      department,
      income,
      car,
      date_stamp(start = as.Date('2020-01-01'), k = 700, by = 'days', random = T, name = 'StartWorks'),
      valid(prob = c(0.1, 0.9), name = 'IsActive')
    ) %>%
      r_na(cols = 8, prob= .25)
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Как добавить анимацию процесса загрузки на визуальный элемент пользовательского интерфейса Shiny приложения —————————— В ноябре в канале было много публикаций посвящённых Rmarkdown. В декабре будет серия публикаций посвящённых пакетам, расширяющих или улучшающих разработку пользовательского интерфейса Shiny приложений. Сегодня первая публикация из этой серии. —————————— Некоторые визуальные элементы (карты, графики, таблицы и т.д.) Shiny приложений могут требовать какого-то времени на пересчёт. Пакет shinycssloaders позволяет вам добавить такой спиннер-информер на любой визуальный элемент. Для добавления просто заверните нужный визуальный элемент в функцию withSpinner(). Пример кода:
    library(shiny)
    
    ui <- fluidPage(
        actionButton("go", "Go"),
        shinycssloaders::withSpinner(
            plotOutput("plot")
        )
    )
    server <- function(input, output) {
        output$plot <- renderPlot({
            input$go
            Sys.sleep(1.5)
            plot(runif(10))
        })
    }
    shinyApp(ui, server)
    
    
    Результат работы видно на изображении к посту. Как по мне для пользователя такой информер будет выглядеть привлекательнее, чем просто потускневший график. Аргумент type позволяет выбрать один из типов анимации загрузки. Посмотреть как выглядит каждый из них можно по ссылке. Аргументы color и size позволяют изменять цвет и размер анимации соответвенно. Опции spinner.type, spinner.color, spinner.size позволяют вам глобально задавать настройки анимации для всех визуальных элементов, обёрнутых функцией withSpinner().
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Аналоги пакетов на R и Python Если в вашей команде часть сотрудников предпочитает Python, а часть R, то вы можете использовать двуязычные пакеты. Это повысит понимание кода для всех участников разработки. Это позволит вам устранить различия и несовместимости, которые могут возникнуть при использовании очень разнообразного стека пакетов. На изображении к посту я перечислил двуязычные пакеты по сферам их применения. Некоторые пакеты имеют различные имена, но схожий синтаксис, давайте разберём пример одного и тоже кода, написанного на двуязычных пакетах dplyr / siuba, и просто с помощью альтернативного варианта на pandas. 1. dplyr
     
    example_df %>%
      mutate(
        a_dbl = a * 2,
        b_tri = b * 3,
        c_half = c / 2,
        b_min_c = b - c) %>%
      filter(b_min_c > 3) %>%
      group_by(category) %>%
      summarize(
        avg_a_dbl = mean(a_dbl),
        avg_b_tri = mean(b_tri),
        avg_c_half = mean(c_half),
        avg_b_min_c = mean(b_min_c)
      )
    2. siuba
     
    (
    example_df
      >> mutate(
        a_dbl = _.a * 2,
        b_tri = _.b * 3,
        c_half = _.c / 2,
        b_min_c = _.b - _.c )
      >> filter(_.b_min_c > 3)
      >> group_by(_.category)
      >> summarize(
        avg_a_dbl = _.a_dbl.mean(),
        avg_b_tri = _.b_tri.mean(),
        avg_c_half = _.c_half.mean(),
        avg_b_min_c = _.b_min_c.mean() )
      )
    3. pandas (1)
     
     (
        example_df
          .assign(a_dbl = example_df.a * 2)
          .assign(b_tri = example_df.b * 3)
          .assign(c_half = example_df.c / 2)
          .assign(b_min_c = example_df.b - example_df.c)
          .query('b_min_c > 3')
          .groupby('category', as_index=False)
          .agg(
              avg_a_dbl = pd.NamedAgg(column='a_dbl', aggfunc=np.mean),
              avg_b_tri = pd.NamedAgg(column='b_tri', aggfunc=np.mean),
              avg_c_half = pd.NamedAgg(column='c_half', aggfunc=np.mean),
              avg_b_min_c = pd.NamedAgg(column='b_min_c', aggfunc=np.mean)
         )
      )
    3. pandas (2)
     
    example_df['a_dbl'] = example_df['a'].mul(2)
      example_df['b_tri'] = example_df['b'] * 3
      example_df['c_half'] = example_df['c'].div(2)
      example_df['b_min_c'] = example_df['b'].sub(example_df['c'], axis = 0)
      example_df = example_df[example_df['b_min_c'] > 3]
      example_df['avg_a_dbl'] = example_df['a_dbl'].groupby(example_df['category']).transform('mean')
      example_df['avg_b_tri'] = example_df['b_tri'].groupby(example_df['category']).transform('mean')
      example_df['avg_c_half'] = example_df['c_half'].groupby(example_df['category']).transform('mean')
      example_df['avg_b_min_c'] = example_df['b_min_c'].groupby(example_df['category']).transform('mean')
    Синтаксис dplyr / siuba очень похож, а pandas, хоть и выполняет те же манипуляции, но имеет другой синтаксис. Смотрите так же: - Какой язык выбрать для работы с данными R или Python? Оба! Мигрируем с pandas на tidyverse и data.table и обратно #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Как конвертировать R скрипт в Rmarkdown документ, и R markdown документ в R скрипт 1. R -> Rmarkdown Если вам надо конвертировать ваш R скрипт в Rmarkdown документ, не обязательно делать это с помощью копи паста. Функция knitr::spin() позволяет выполнить такую конвертацию, при этом необходимо учитывать следующие правила синтаксиса конвертации: ● Roxygen комментарии будут рассматриваться как обычный текст. ● Комментарий, начинающийся с #+, считается заголовком блока Knitr . Например, knitr::spin() переводит комментарий #+ label, fig.width=5 в заголовок чанка {r label, fig.width=5}. ● Код R формы {{ code }}преобразуется во встроенное выражение R в R Markdown. ● YAML шапка также может быть написана в начале R-скрипта в комментариях roxygen. ● Любой текст между /* и */ будет игнорироваться. Привет R скрипта:
    #' ---
    #' title: "A report generated from a pure R script"
    #' output:
    #'   pdf_document:
    #'     keep_tex: true
    #' ---
    #'
    #' This is a report generated by `knitr::spin()`.
    #'
    #' Let's try some **knitr** options:
    
    #+ echo=FALSE, fig.width=7
    #  This is a normal R comment.
    plot(cars)
    
    #' Now write an inline value. We know the value of $\pi$ is
    {{ pi }}
    #' .
    #'
    #' Finally please note that all roxygen comments are
    #' optional. You do not need chunk options, either,
    #' unless you want more control over the output
    #' elements such as the size of plots.
    
    # /* Write comments between /* and */ like C comments:
    Sys.sleep(60)
    # */
    
    
    Функция knitr::spin() преобразует данный код в Rmarkdown документ следующего формата:
    ---
    title: "A report generated from a pure R script"
    output:
      pdf_document:
        keep_tex: true
    ---
    
    This is a report generated by `knitr::spin()`.
    
    Let's try some **knitr** options:
    
    ```{r echo=FALSE, fig.width=7}
    #  This is a normal R comment.
    plot(cars)
    ```
    
    Now write an inline value. We know the value of $\pi$ is
    ``r  pi  ``
    .
    
    Finally please note that all roxygen comments are
    optional. You do not need chunk options, either,
    unless you want more control over the output
    elements such as the size of plots.
    
    
    2. Rmarkdown -> R Обратная операция, т.е. преобразования Rmarkdown в R скрипт, реализуется функцией knitr::purl(). Данная функция принимает в качестве первого аргумента путь к Rmarkdown документы, и второй аргумент позволяет управлять тем, что из Rmarkdown документа будет отображено в файле с R скриптом.
    # Извлечение только R кода
    knitr::purl("script.R", documentation = 0L)
    
    # Извлечение R кода и настроек чанков
    knitr::purl("script.R", documentation = 1L)
    
    # Извлечение всего содержимого Rmarkdown документа
    knitr::purl("script.R", documentation = 2L)
    
    
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Как проверить принадлежность объекта определённому классу R по большей части является функциональным языком программирования, и новички зачастую вообще не обращают внимания на принадлежность какого либо объекта, какому нибудь классу. Тем не менее, в R так же реализована объектно ориентированная парадигма программирования. Первое, что приходит в голову тем, кто хочет проверить принадлежность какого то объекта определённому классу это class(X)=='foo'. Самая большая проблема этого подхода заключается в том, что в большинстве случаев он сработает, например:
     
    class(mtcars) == 'data.frame'
    [1] TRUE
    Т.е. когда объект имеет простейшую иерархию классов, то этот подход будет работать, но если мы преобразуем таблицу mtcars в tibble, то его иерархия классов будет уже более сложной, и вы получите немного неожиданный ответ:
     
    class(tibble::tibble(mtcars)) == 'data.frame'
    [1] FALSE FALSE  TRUE
    Это связано с тем, что tibble имеет унаследованные классы:
     
    class(tibble::tibble(mtcars))
    [1] "tbl_df"     "tbl"        "data.frame"
    Если вы используете R 4.2.0 и выше, и данное логическое выражение будете использовать внутри конструкции if, то вы вообще получите ошибку. Другим подходом может быть использование оператора %in%:
     
    'data.frame' %in% class(tibble::tibble(mtcars))
    [1] TRUE
    Логически этот подход будет работать корректно даже с объектами, которые имеют сложную иерархию классов. Тем не менее, для операции проверки принадлежности объекта определённому классу существует специальная функция :
     
    inherits(tibble::tibble(mtcars), 'data.frame')
    [1] TRUE
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Игра "Найди слова" на R Очередная пятничная игра на R. Ранее я уже рассказывал о том, как с помощью пакета worrrd можно создавать кроссворды. Но, помимо кроссвордов данный пакет позволяет создавать игры "Поиск слов". По прошлому примеру я создам поле для игры "Поиск слов", в котором надо найти глаголы dplyr. Пример:
    library(worrrd)
    
    # вектор слов
    words <- c("filter", "mutate", "arrange", "summarise", "group_by", "left_join")
    # создаём объект поля
    x <- wordsearch(words, r = 20, c = 20)
    # отображааем поле
    plot(x, solution = TRUE)
    
    
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Опции R CMD BATCH В одном из видео уроков я рассказывал о том, как настроить запуск R скриптов через планировщик заданий Windows. Но в ходе урока я ничего не упоминал о доступных при запуске через R CMD BATCH опциях. Этим сообщением я решил немного дополнить информацию изложенную в видео уроке. Синтаксис:
    R CMD <options> <r file>
    
    
    Список основных опций команды R CMD BATCH: --help - Вывести справку ● --version - Вывести информацию о версии R ● --encoding=enc - Позволяет указать кодировку, которая будет использоваться для ввода с консоли или stdin. ● --save / --no-save - Следует ли сохранять наборы данных в конце сеанса R. ● --no-environ - Игнорировать при запуске скрипта файл .Renviron со списком переменных среды. ● --no-site-file -Игнорировать при запуске файл Rprofile.site, ● --no-init-file - Игнорировать при запуске пользовательский файл Rprofile ● --restore / --no-restore / --no-restore-data - Должно ли подгружаться сохранённое ранее рабочее окружение при запуске скрипта ● --no-restore-history - Должен ли загружаться файл .Rhistory при запуске ● --vanilla - Сочетание опций --no-save, --no-environ, --no-site-file, --no-init-file и --no-restore Пример: R CMD BATCH --no-restore --no-init-file script.R #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Как добавить прогресс бар к циклу for Пакет cli позволяет вам создавать интерфейс командной строки. Например, все сообщения, которые вы получаете при использовании tidyverse разработаны именно с помощью cli. В плане разработки интерфейса командной строки пакет cli предоставляет очень широкий функционал, который невозможно поместить в одну маленькую заметку. Поэтому сегодня мы рассмотрим лишь одну из его возможностей - добавление прогресс бара в циклы. Добавление прогресс бара осуществляется в 3 шага: 1. Функция cli_progress_bar() создаёт прогресс бар 2. cli_progress_update() обновляет состояние прогресс бара 3. cli_progress_done() завершает работу прогресс бара. Пример:
    clean <- function() {
      cli_progress_bar("Cleaning data", total = 100)
      for (i in 1:100) {
        Sys.sleep(5/100)
        cli_progress_update()
      }
      cli_progress_done()
    }
    
    clean()
    
    
    Результат работы приведённого кода вы видите на изображении к посту. #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Обзор научно-издательской системы Quarto Автор: Евгений Матеров Меня уже спрашивала о материалах про Quarto, так что этот материал будет многим полезен. Содержание: 1. Что такое Quarto? 2. Как начать работу с Quarto? 3. Публикация веб-документов 4. Сравнение инструментов R Markdown с Quarto 5. Расширения 6. Возможности для автоматизации 7. Дополнительные ресурсы по Quarto 8. Некоторые преимущества и недостатки Quarto 9. Заключение #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Располагаем параметры чанков Rmarkdown внутри самого чанка Rmarkdown документ состоит из текста с markdown разметкой и чанков. Чанки это фрагменты кода, которые выполняются в результате рендинга Rmarkdown файлов. Каждый чанк может иметь огромное количество параметров. Например, вы можете исключить из вывода чанка сам код, предупреждения, сообщения, вывод результата, и настроить множество других параметров: ● eval - следует ли выполнять код чанка ● echo - следует ли включать исходный код чанка ● results - позволяет отображать выводом результата чанка, возможные значения: markup, asis, hold, hidewarning - следует ли включать предупреждения в вывод чанка ● error - следует ли включать ошибки в вывод чанка Все доступные опции чанков можно посмотреть тут. Обычно опция чанка описываются в фигурных скобках, в шапке чанка:
    ```{r cars-plot, echo = FALSE, message = FALSE, fig.width = 6, fig.height = 6, fig.path = "figures/", fig.cap = "This is a long caption that fits better inside of a code chunk.", fig.alt = "This is a long description that conveys the meaning of the visual."}
    ggplot(data = mtcars, aes(x = wt, y = mpg)) +
      geom_point()
    ```
    
    
    Если чанк имеет всего пару опций, то такой вариант вполне удовлетворим, но, как в примере выше, если у чанка с десяток опций, то читать их в таком виде достаточно сложно. Начиная с Knitr версии 1.35, опции чанков можно прописывать не только в шапке, но и внутри самого чанка, обозначив их специальным комментарием #|:
    ```{r cars-plot}
    #| echo = FALSE,
    #| message = FALSE,
    #| fig.width = 6, fig.height = 6,
    #| fig.path = "figures/",
    #| fig.caption = "This is a long caption that fits better inside of a code chunk"
    #| fig.alt = "This is a long description that conveys the meaning of the visual."
    
    ggplot(data = mtcars, aes(x = wt, y = mpg)) +
      geom_point()
    ```
    
    
    В таком варианте опции чанка читать значительно удобнее. #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Друзья, у нас в Netpeak открыта вакансия веб аналитика! ———————————————— Агентство Netpeak у пошуках Middle Web Analyst для надання послуг у сфері веб-аналітики. Приєднуйся до нашої команди і разом ми зможемо зробити ще один український продукт конкурентним на глобальній технологічній арені! ❗️Чому саме ми? - Робота в агентстві performance-маркетингу №1 в Україні, Болгарії та Казахстані (згідно з різними рейтингами, включаючи Рейтинг IAB Ukraine). - Ми є сертифікованим партнером Google з веб-аналітики. - Українська компанія, яка платить податки в український держбюджет і забезпечує економічний тил для перемоги у війні. - У середньому протягом останніх трьох років наш дохід зростав на 99,6% на рік. 🔥 Що ми пропонуємо: - Кар’єрне зростання всередині компанії та можливість у майбутньому зайняти позицію Team Lead. - Масштабні та цікаві проекти за різною тематикою та бюджетом. - Можливість максимально прокачати існуючі та набути нові навички. - Робота у дружній команді, які завжди готові обмінюватися досвідом та передавати свою експертизу. -Комфортне середовище, де ви з легкістю зможете реалізувати свій потенціал. - Можливість самостійно планувати свій робочий день(гнучкий графік з 8(10) до 17(19)), працювати в офісі чи віддалено. 📌 Наші очікування: - Досвід роботи на позиції веб-аналітика від 2-ох років. - Знання SQL на рівні CTE та складних Window Functions, робота з Google BigQuery. - Вміння використовувати мови програмування Python для підготовки конекторів та аналізу даних. - Робота з Google Analytics 4 та досвідчений користувач Google Tag Manager. - Вміння запускати A/B тести у Google Optimize. - Володіння англійською від рівня Upper-Intermediate. 👨‍💻 Функціональні обов'язки: - Налаштування систем аналітики, звітності, BI проектів, візуалізації даних для наших клієнтів. - Розвиток тестового оточення: підтримка конекторів з розвантаження даних, тестування нових інструментів та рішень, ведення документації та GitHub. - Знаходити місця втрати трафіку, формувати гіпотез, проводити та інтерпретувати результати A/B тестів. - Підготовка, об'єднання та агрегація даних за допомогою SQL. Більше детально ознайомитися з вакансією можливо за посиланням. 👉 Telegram: @bo_peeb_bo
    Netpeak Україна — performance-маркетинг для бізнесу

    Netpeak — просування сайтів в Україні: досвід ефективної розкрутки сайтів з 2006 року. Серед наших клієнтів — OLX, Планета Кіно, ПриватБанк, Kärcher.

    netpeak.net
  • R4marketing | канал Алексея Селезнёва | Язык R

    Создаём кроссворд на R Пакет worrrd позволяет быстро создавать кроссворды на основе дата фреймов. Далее такой кроссворд можно сохранить как изображение или распечатать. Пример:
    library(worrrd)
    
    # Вопросы и ответы
    dat <- 
      dplyr::tribble(
        ~word,   ~clue,
        "filter",   "фильтрация данных",
        "mutate",   "добавляет новый столбец",
        "arrange",  "сортирует данные",
        "summarise", "агрегация данных",
        "group_by", "группировка данных",
        "left_join", "соединить две таблицы"
      )
    
    # Создаём объект кроссворда
    ex1 <- crossword(words = dat$word, clues = dat$clue, r = 40, c = 40)
    
    # Рисуем кроссворд
    plot(ex1, solution = TRUE, clues = TRUE, legend_size = 3)
    Аргумент solution = TRUE позволяет скрывать, или наоборот отобрать ответы. Как по мне, это интересный способ закрепить знания по итогам лекции, или пройденного видео урока. Так что вполне можно использовать в хоте обучения студентов. Результат работы приведённого кода можно увидеть на изображении к посту. #заметки_по_R
  • Реклама

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Набор полезных инфиксных операторов в R Пакет infix состоит из коллекции полезных операторов, которые можно разделить на 4 категории: ● Пайп операторы из пакета magrittr, о них я подробно рассказывал тут; ● Оператор обработки ошибок; ● Логические операторы функций; ● Общие операторы. Операторы обработки ошибок Для обработки ошибок infix предоставляет вам функцию tryExcept() и оператор %except% . Функция tryExcept() имеет 3 аргумента: ● expr - выражение, которое будет оцениваться ● except - выражение, которое будет выполняться, если expr завершился ошибкой ● error - функция обработчика ошибки, возникшей во время оценки expr. Примеры:
     
    tryExcept({
      foo <- "foo"
      stop()
    }, except = {
      foo <- "foo bar"
    })
    print(foo) # "foo bar"
    
    
    С помощью оператора тоже самое можно прописать вот так:
     
      stop()
    } %except% {
      foo <- "foo bar"
    }
    print(foo) # "foo bar"
    
    
    Логические операторы функций Данный блок состоит из 3 операторов: f1 %&% f2 - логическое и f1 %|% f2 - логическое или f1 %xor% f2 - исключающее или Пример:
     
    is.null.na <- is.null %|% is.na
    all(is.null.na(NA), is.null.na(NULL)) # вернёт TRUE
    
    
    Общие операторы В этот блок входят 4 оператора: ● %+% - оператор конкатенации строк ● %//% - создаёт строку пути к файлу ● %!in% - логическое не в списке, инвертированный оператор %in% %||% - оценивает выражение, и пропускает NULL, аналог функции dplyr::coalesce() Примеры:
     
    # paste0 (%+%)
    "01" %+% "jan" %+% "1970" # вернёт "01jan1970"
    
    # file.path (%//%)
    "home" %//% "dir" # вернёт "home/dir"
    
    # nomatch (%!in%)
    4 %!in% 1:3 # вернёт TRUE
    
    # nil (%||%)
    1 %||% 2 # вернёт 1
    NULL %||% 2 # вернёт 2
    
    
    #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Трюки ggplot2: агрегирование Автор: Кибальников Дмитрий (@Kb_Dm) Одной из трудных для освоения областей при работе с визуализацией – является отображение различных агрегированных статистик вроде суммы, среднего, медианы и тому подобного. Действительно, часто хочется одновременно лицезреть и структуру и обобщающую совокупность на одном графике. Данная заметка будет посвящена тому как получить желаемый результат без особых напряжений. Содержание: 1. Краткое вступление 2. Цены на жилье 3. Очевидное решение 4. Делай stat 1 5. Делай stat 2 6. Итоги Другие публикации этой серии: Трюки ggplot2 - легенда Неопределённость и бизнес Трюки ggplot2 - распределения #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Параметризация rmarkdown файлов Rmarkdown очень мощная технология, позволяющая генерировать storytelling отчёты. Данная технология поддерживает параметризацию, например вы создаёте шаблон отчёта, и с помощью параметров по этому шаблону можете изменять: ● Отчётный период ● Географию ● Торговые точки ● Список сотрудников И так далее, т.е. использовать единый шаблон, но с помощью параметров менять расчёты. В rmarkdown есть несколько способов параметризации: ● с помощью YAML шапки и заголовка params
     
    ---
    title: My Document
    output: html_document
    params:
      year: 2018
      region: Europe
      printcode: TRUE
      data: file.csv
    ---
    К тому же можно использовать динамическое присваивание значений параметрам, указав !r :
     
    ---
    title: My Document
    output: html_document
    params:
      date: !r Sys.Date()
    ---
    ● также для параметризации можно использовать аргумент params в функции render().
     
    rmarkdown::render("MyDocument.Rmd", params = list(
      year = 2017,
      region = "Asia",
      printcode = FALSE,
      file = "file2.csv"
    ))
    Обращение к параметрам Внутри Rmd файла в случае параметризации вам становится доступен список params, в котором и будут доступны все созданные параметры:
     
    params$year
    params$region
    #заметки_по_R