24.04.202508:02
Новый видеоурок: Использование LLM-моделей в языке R — на практике и бесплатно
В этом видео я показываю реальный кейс из своей работы, где мы встроили LLM-модели (на примере Gemini) в ежедневные процессы аналитики — всё с помощью языка R.
Весь показанный функционал реализован на 100% бесплатно, без покупки подписок или платных API.
На основе пакетов
В этом видео вы узнаете:
● Как бесплатно получить API-ключ Gemini и подключить его к R.
● Как настраивать и использовать объект chat.
● Как с помощью LLM извлекать структурированные данные из текста.
● Как добавить в чат сторонние API как "инструменты".
● Как построить простой, но мощный графический интерфейс с shinychat.
● Как дообучить модель своими данными — для точных ответов под ваш контекст.
Тайм коды:
00:00 О чём это видео
01:05 Кейс практического внедрения AI в рабочие процессы
06:49 Введение в пакет
08:20 Как бесплатно сгенерировать API ключ для работы с Gemini API
09:05 Аргументы конструктора LLM чатов
11:07 Создаём объект chat
13:01 Методы объекта chat
14:30 Отправляем запрос в LLM
17:03 Извлечение структурированных данных из текста
24:15 Добавляем в чат инструменты, работа со сторонними API
28:17 Создаём графический интерфейс для нашего чата с помощью
31:02 Как дообучить модель своими данными
33:50 Заключение
Ссылки:
- Код продемонстрированный в видео
#видео_уроки_по_R
В этом видео я показываю реальный кейс из своей работы, где мы встроили LLM-модели (на примере Gemini) в ежедневные процессы аналитики — всё с помощью языка R.
Весь показанный функционал реализован на 100% бесплатно, без покупки подписок или платных API.
На основе пакетов
ellmer
и shinychat
я шаг за шагом объясняю, как создать умного чат-бота, обрабатывать текст, подключать сторонние API и даже дообучать модель под себя.В этом видео вы узнаете:
● Как бесплатно получить API-ключ Gemini и подключить его к R.
● Как настраивать и использовать объект chat.
● Как с помощью LLM извлекать структурированные данные из текста.
● Как добавить в чат сторонние API как "инструменты".
● Как построить простой, но мощный графический интерфейс с shinychat.
● Как дообучить модель своими данными — для точных ответов под ваш контекст.
Тайм коды:
00:00 О чём это видео
01:05 Кейс практического внедрения AI в рабочие процессы
06:49 Введение в пакет
ellmer
08:20 Как бесплатно сгенерировать API ключ для работы с Gemini API
09:05 Аргументы конструктора LLM чатов
11:07 Создаём объект chat
13:01 Методы объекта chat
14:30 Отправляем запрос в LLM
17:03 Извлечение структурированных данных из текста
24:15 Добавляем в чат инструменты, работа со сторонними API
28:17 Создаём графический интерфейс для нашего чата с помощью
shinychat
31:02 Как дообучить модель своими данными
33:50 Заключение
Ссылки:
- Код продемонстрированный в видео
#видео_уроки_по_R
29.01.202509:01
httr2 1.1.0
Команда Хэдли продолжает развивать
В версии 1.1.0 появилось несколько значительных улучшений: поддержка потоковой передачи данных, новые инструменты для работы с URL, улучшенная интеграция с AWS и многое другое.
Разберем ключевые нововведения и примеры их использования.
————————————
1. Потоковая передача данных
Новая функция
Пример создания запроса с потоковой передачей:
Читаем данные частями:
Для обработки построчных данных (
2. Работа с URL
Появились удобные инструменты для манипуляции URL.
2.1. Изменение компонентов URL
2.2. Изменение параметров запроса
2.3. Работа с относительными URL
3. Поддержка AWS
Теперь httr2 позволяет легко подписывать запросы для AWS:
Это упрощает работу с сервисами Amazon, такими как S3, DynamoDB, API Gateway и другими.
4. Дополнительные улучшения
● Кэширование: Оптимизирована система кэширования запросов.
● Обработка ошибок: Теперь сообщения об ошибках стали информативнее.
● Поддержка OAuth: Улучшена аутентификация через OAuth.
В основе поста лежит статья "httr2 1.1.0".
#новости_и_релизы_по_R
Команда Хэдли продолжает развивать
httr2
— современный пакет для работы с веб-API в R, с момента его появления все новые пакеты я пишу именно на его основе. В версии 1.1.0 появилось несколько значительных улучшений: поддержка потоковой передачи данных, новые инструменты для работы с URL, улучшенная интеграция с AWS и многое другое.
Разберем ключевые нововведения и примеры их использования.
————————————
1. Потоковая передача данных
Новая функция
req_perform_connection()
улучшает поддержку потоковой передачи ответов, что особенно полезно при работе с LLM и обработке больших объемов данных.Пример создания запроса с потоковой передачей:
library(httr2)
Читаем данные частями:
while (!resp_stream_is_complete(resp)) {
Для обработки построчных данных (
resp_stream_lines()
) и событий сервера (resp_stream_sse()
) добавлены отдельные функции.2. Работа с URL
Появились удобные инструменты для манипуляции URL.
2.1. Изменение компонентов URL
url_modify("https://example.com", hostname = "github.com")
2.2. Изменение параметров запроса
url_modify_query("http://example.com?a=1&b=2", a = 10)
2.3. Работа с относительными URL
url_modify_relative("https://example.com/a/b/c.html", "/d/e/f.html")
3. Поддержка AWS
Теперь httr2 позволяет легко подписывать запросы для AWS:
req <- request("https://s3.amazonaws.com/bucketname") |>
Это упрощает работу с сервисами Amazon, такими как S3, DynamoDB, API Gateway и другими.
4. Дополнительные улучшения
● Кэширование: Оптимизирована система кэширования запросов.
● Обработка ошибок: Теперь сообщения об ошибках стали информативнее.
● Поддержка OAuth: Улучшена аутентификация через OAuth.
В основе поста лежит статья "httr2 1.1.0".
#новости_и_релизы_по_R
20.11.202409:01
S7 0.2.0: Новый стандарт ООП в R
S7 — это гибкий и мощный инструмент для объектно-ориентированного программирования в R, предлагающий строгость S4 и простоту S3. Новая версия 0.2.0 усиливает производительность, вводит улучшенную совместимость с S3 и добавляет гибкие валидаторы. Проектирование и реализация S7 были совместными усилиями рабочей группы из R Consortium , включая представителей R-Core, Bioconductor, tidyverse/Posit, ROpenSci и более широкого сообщества R. В будущем разработчики планируют интеграцию S7 в базовый R.
Установите пакет, чтобы попробовать новый подход к ООП:
Основные возможности S7
1. Создание классов
S7 позволяет определять классы с четкими типами свойств. Для обеспечения корректности данных можно использовать валидаторы.
Пример:
2. Создание методов
Методы создаются через обобщенные функции (
Пример:
3. Совместимость с S3
S7 интегрируется с S3-методами, что облегчает переход на новую систему. Например, можно использовать существующие S3-классы как базовые.
4. Наследование классов
Создание иерархий классов позволяет расширять возможности базового класса.
Пример:
Производительность и планы на будущее
S7 разработан с учетом высокой производительности: проверки свойств реализованы на уровне C, что делает его подходящим для обработки больших объемов данных. В будущем планируется включить поддержку S7-классов в базовый R, что сделает их стандартом.
Почему стоит использовать S7?
Простота: Создание классов и методов не сложнее, чем в S3.
Надежность: Строгая типизация предотвращает ошибки.
Универсальность: Подходит для создания библиотек, построения API и работы с данными.
Ссылки:
● S7 0.2.0 (eng)
Так же про ООП в R
● ООП в языке R (часть 1): S3 классы
● ООП в языке R (часть 2): R6 классы
#новости_и_релизы_по_R
S7 — это гибкий и мощный инструмент для объектно-ориентированного программирования в R, предлагающий строгость S4 и простоту S3. Новая версия 0.2.0 усиливает производительность, вводит улучшенную совместимость с S3 и добавляет гибкие валидаторы. Проектирование и реализация S7 были совместными усилиями рабочей группы из R Consortium , включая представителей R-Core, Bioconductor, tidyverse/Posit, ROpenSci и более широкого сообщества R. В будущем разработчики планируют интеграцию S7 в базовый R.
Установите пакет, чтобы попробовать новый подход к ООП:
install.packages("S7")
Основные возможности S7
1. Создание классов
S7 позволяет определять классы с четкими типами свойств. Для обеспечения корректности данных можно использовать валидаторы.
Пример:
Range <- new_class("Range",
2. Создание методов
Методы создаются через обобщенные функции (
new_generic()
). Это упрощает настройку поведения для различных классов.Пример:
greeting <- new_generic("greeting", function(x) NULL)
3. Совместимость с S3
S7 интегрируется с S3-методами, что облегчает переход на новую систему. Например, можно использовать существующие S3-классы как базовые.
4. Наследование классов
Создание иерархий классов позволяет расширять возможности базового класса.
Пример:
Employee <- new_class("Employee", parent = Range, properties = list(
Производительность и планы на будущее
S7 разработан с учетом высокой производительности: проверки свойств реализованы на уровне C, что делает его подходящим для обработки больших объемов данных. В будущем планируется включить поддержку S7-классов в базовый R, что сделает их стандартом.
Почему стоит использовать S7?
Простота: Создание классов и методов не сложнее, чем в S3.
Надежность: Строгая типизация предотвращает ошибки.
Универсальность: Подходит для создания библиотек, построения API и работы с данными.
Ссылки:
● S7 0.2.0 (eng)
Так же про ООП в R
● ООП в языке R (часть 1): S3 классы
● ООП в языке R (часть 2): R6 классы
#новости_и_релизы_по_R
25.09.202408:01
Динамическая вставка таблиц в RMarkdown
Допустим у вас есть большой дата фрейм, в котором есть один, или несколько столбцов, позволяющий разбить данные на какие то категории по отдельным таблицам, например по отделу, региону, или другому признаку. Далее в RMarkdown вам необходимо каждую подтаблицу напечатать отдельно, при этом количество этих категорий может меняться, ниже я покажу один из способов сделать это.
Изначально вам необходимо с помощью функции
Теперь для того, что бы каждую подтаблицу вывести в RMarkdown как отдельную таблицу необходимо пройтись по списку подтаблиц, например с помощью функции
Ниже небольшой пример кода, как это можно сделать:
Этот код делает следующее:
1. Разбивает таблицу
2. Использует
3. Создает HTML-таблицу для каждой подтаблицы с помощью
4. Добавляет стили с
5. Выводит каждую таблицу в документ с помощью
6. Добавляет пустые строки между таблицами для лучшей читаемости.
Надеюсь, этот подход будет полезен в вашей работе с RMarkdown. Если у вас возникнут вопросы или вы захотите поделиться своими методами работы с данными, пишите в комментариях!
#заметки_по_R
Допустим у вас есть большой дата фрейм, в котором есть один, или несколько столбцов, позволяющий разбить данные на какие то категории по отдельным таблицам, например по отделу, региону, или другому признаку. Далее в RMarkdown вам необходимо каждую подтаблицу напечатать отдельно, при этом количество этих категорий может меняться, ниже я покажу один из способов сделать это.
Изначально вам необходимо с помощью функции
split()
разбить основную таблицу, на подтаблицы, о том как это сделать я уже рассказывал. Теперь для того, что бы каждую подтаблицу вывести в RMarkdown как отдельную таблицу необходимо пройтись по списку подтаблиц, например с помощью функции
purrr:walk()
, и вывести по очереди их на печать. Ниже небольшой пример кода, как это можно сделать:
library(knitr)
Этот код делает следующее:
1. Разбивает таблицу
df
на список подтаблиц;2. Использует
purrr::walk()
для итерации по именам подтаблиц в нашем списке;3. Создает HTML-таблицу для каждой подтаблицы с помощью
kable()
;4. Добавляет стили с
kable_styling()
5. Выводит каждую таблицу в документ с помощью
cat()
6. Добавляет пустые строки между таблицами для лучшей читаемости.
Надеюсь, этот подход будет полезен в вашей работе с RMarkdown. Если у вас возникнут вопросы или вы захотите поделиться своими методами работы с данными, пишите в комментариях!
#заметки_по_R
22.08.202407:59
Новый видеоурок: Развертывание Telegram-бота на Heroku
В этом видео мы погружаемся в развертывание Telegram-бота на платформе Heroku. Я покажу, как использовать Heroku CLI для развертывания бота без необходимости работы с Docker. Подробно разберем все шаги, начиная от подготовки проекта и заканчивая настройкой переменных среды и тестированием бота.
В этом видео вы узнаете:
● Как подготовить ваш проект для развертывания на Heroku.
● Как использовать Heroku CLI для создания и управления приложениями.
● Как настроить переменные среды для вашего бота.
● Как отправить данные на Heroku, запустить бота и проверить его работу.
Тайм-коды:
00:00 – Вступление
00:30 – Что такое Heroku
00:52 – Какой софт понадобится
01:14 – Обзор рабочего процесса
02:25 – Файлы, необходимые для развертывания бота на Heroku
03:31 – Рассмотрение кода бота для Heroku
05:20 – Что такое Webhook
08:00 – Описание зависимостей и файл init.R
08:48 – Создание Profile
09:43 – Создание app.json
11:09 – Авторизация в Heroku CLI
12:33 – Создание приложения в Heroku
13:10 – Создание переменных среды в приложении
14:55 – Установка buildpack для развертывания
16:18 – Отправка данных в Heroku и запуск бота
17:44 – Тестирование бота в Telegram
18:15 – Заключение
Ссылки:
● Видео
● Файлы проекта
● Учебник по разработке telegram ботов
#видео_уроки_по_R
В этом видео мы погружаемся в развертывание Telegram-бота на платформе Heroku. Я покажу, как использовать Heroku CLI для развертывания бота без необходимости работы с Docker. Подробно разберем все шаги, начиная от подготовки проекта и заканчивая настройкой переменных среды и тестированием бота.
В этом видео вы узнаете:
● Как подготовить ваш проект для развертывания на Heroku.
● Как использовать Heroku CLI для создания и управления приложениями.
● Как настроить переменные среды для вашего бота.
● Как отправить данные на Heroku, запустить бота и проверить его работу.
Тайм-коды:
00:00 – Вступление
00:30 – Что такое Heroku
00:52 – Какой софт понадобится
01:14 – Обзор рабочего процесса
02:25 – Файлы, необходимые для развертывания бота на Heroku
03:31 – Рассмотрение кода бота для Heroku
05:20 – Что такое Webhook
08:00 – Описание зависимостей и файл init.R
08:48 – Создание Profile
09:43 – Создание app.json
11:09 – Авторизация в Heroku CLI
12:33 – Создание приложения в Heroku
13:10 – Создание переменных среды в приложении
14:55 – Установка buildpack для развертывания
16:18 – Отправка данных в Heroku и запуск бота
17:44 – Тестирование бота в Telegram
18:15 – Заключение
Ссылки:
● Видео
● Файлы проекта
● Учебник по разработке telegram ботов
#видео_уроки_по_R
31.07.202408:02
Преобразовываем речь в текст с помощью R и Google Speech-to-Text API
Привет, друзья! Сегодня я расскажу вам, как создать функцию на R, которая преобразует речь из MP3, Wav или OGG (голосовые сообщения в телеге) файла в текст. Это особенно полезно для расшифровки аудиозаписей, подкастов или голосовых заметок.
Google Speech-to-Text API является условно бесплатным, т.е. бесплатно вы можете в месяц с помощью этого сервиса преобразовать час аудио в текст.
Давайте пройдемся по всему процессу шаг за шагом.
1️⃣ Настройка проекта Google Cloud
Прежде чем начать кодить, нам нужно настроить проект в Google Cloud:
1. Зайдите на console.cloud.google.com и создайте новый проект.
2. Включите API Speech-to-Text в разделе "APIs & Services".
3. Создайте учетные данные (Service Account Key) для доступа к API:
3.1. Перейдите в "APIs & Services" > "Credentials"
3.2. Нажмите "Create Credentials" > "Service Account Key"
3.3. Выберите роль "Project" > "Owner"
3.4. Скачайте JSON файл с ключом
2️⃣ Установка необходимых пакетов R
3️⃣ Код функции
Вот функция, которая делает всю магию:
4️⃣ Использование функции
В результате получим следующее:
Ниже два небольших файла, один в mp3, второй в ogg формате, для тестов.
#заметки_по_R
Привет, друзья! Сегодня я расскажу вам, как создать функцию на R, которая преобразует речь из MP3, Wav или OGG (голосовые сообщения в телеге) файла в текст. Это особенно полезно для расшифровки аудиозаписей, подкастов или голосовых заметок.
Google Speech-to-Text API является условно бесплатным, т.е. бесплатно вы можете в месяц с помощью этого сервиса преобразовать час аудио в текст.
Давайте пройдемся по всему процессу шаг за шагом.
1️⃣ Настройка проекта Google Cloud
Прежде чем начать кодить, нам нужно настроить проект в Google Cloud:
1. Зайдите на console.cloud.google.com и создайте новый проект.
2. Включите API Speech-to-Text в разделе "APIs & Services".
3. Создайте учетные данные (Service Account Key) для доступа к API:
3.1. Перейдите в "APIs & Services" > "Credentials"
3.2. Нажмите "Create Credentials" > "Service Account Key"
3.3. Выберите роль "Project" > "Owner"
3.4. Скачайте JSON файл с ключом
2️⃣ Установка необходимых пакетов R
install.packages(c("tuneR", "seewave", "googledrive", "googleAuthR", "googleLanguageR", "av"))
3️⃣ Код функции
Вот функция, которая делает всю магию:
library(tuneR)
4️⃣ Использование функции
# Пример использования:
В результате получим следующее:
> transcript_mp3
[1] "небольшая текстовая начитка для преобразования речи в текст с помощью языка R"
Ниже два небольших файла, один в mp3, второй в ogg формате, для тестов.
#заметки_по_R
17.04.202507:59
Гибкий импорт в R 4.5 с помощью use()
Всем привет, давно я тут ничего не писал, надо понемногу исправляться.
11 апреля 2025 года вышла новая версия R — R 4.5.0 “How About a Twenty-Six”. Как обычно, разработчики завезли кучу полезных мелочей и парочку реально классных фич. Одна из самых интересных — это функция
Если ты когда-нибудь писал на Python, то помнишь, как там удобно можно импортировать только нужные функции:
В R же приходилось выбирать между:
Или
Проблема второго способа в том, что разные пакеты могут переопределять друг друга. Яркий пример —
А если попробовать вызвать что-то не из списка, например
#новости_и_релизы_по_R
Всем привет, давно я тут ничего не писал, надо понемногу исправляться.
11 апреля 2025 года вышла новая версия R — R 4.5.0 “How About a Twenty-Six”. Как обычно, разработчики завезли кучу полезных мелочей и парочку реально классных фич. Одна из самых интересных — это функция
use()
, которой давно в R не хватало.Если ты когда-нибудь писал на Python, то помнишь, как там удобно можно импортировать только нужные функции:
from numpy import array
В R же приходилось выбирать между:
dplyr::filter(penguins, bill_len > 40)
Или
library(dplyr)
Проблема второго способа в том, что разные пакеты могут переопределять друг друга. Яркий пример —
filter()
из dplyr
и stats
. Эту проблему можно было решить с помощью таких пакетов как conflicted
, modules
и import
о чём я уже как то рассказывал тут. Так вот, в R 4.5.0 подвезли use()
- аккуратный способ подключать только нужные функции из пакета:use("dplyr", c("filter", "select"))
penguins |>
А если попробовать вызвать что-то не из списка, например
n_distinct()
, то R честно скажет, что такой функции в текущем окружении нет.#новости_и_релизы_по_R
11.12.202408:59
Elmer: Универсальный инструмент для работы с LLM через R
Ранее я уже рассказывал о пакете
1. Что такое Elmer?
● Мульти-провайдерная поддержка, на данный момент реализована поддержка:
● Anthropic’s Claude:
● AWS Bedrock:
● Azure OpenAI:
● Databricks:
● GitHub model marketplace:
● Google Gemini:
● Groq:
● Ollama: chat_ollama()`.
● OpenAI: `chat_openai()`.
● perplexity.ai: `chat_perplexity()`.
● Snowflake Cortex: `chat_cortex()`.
Кстати, создатели `elmer` утверждают, что для генерации кода по их мнению лучше всего себя проявляет Anthropic’s Claude, т.е. Claude.ai, и я по этому поводу тоже уже своими наблюдениями делился.
● Гибкость в настройках промптов и диалогов.
● Извлечение структурированных данных из текста.
● Поддержка асинхронных вызовов для повышения производительности.
Эти функции делают Elmer мощным инструментом для анализа данных, автоматизации задач и разработки приложений.
2. Установка
Установите
3. Управление диалогами
Чат-объекты в
4. Программные возможности
4.1. Интерактивный режим: Используйте R-консоль для живого общения:
4.2. Программный режим: Создайте сценарий, возвращающий результаты для дальнейшей обработки:
4.3. Асинхронные вызовы: Используйте асинхронный API для ускорения обработки больших объемов данных.
5. Извлечение структурированных данных
● Анализ отзывов клиентов.
● Извлечение рецептов и их структурирование.
● Геокодирование адресов.
Пример:
6. Работа с токенами
Один запрос к модели GPT-4o mini может стоить от $0.15 за миллион токенов, что делает использование API доступным для экспериментов.
7. Рекомендации по промптам
Правильный дизайн промптов — ключ к качественным ответам. Например:
● Укажите системные инструкции для кастомизации:
● Используйте промпты для автоматизации, например, создания документации на основе README вашего пакета.
8. Кейсы использования
Elmer отлично подходит для:
● Создания чат-ботов для поддержки пользователей.
● Прототипирования инструментов: автоматизация анализа данных и отчетности.
● Кастомизации работы LLM под специфические задачи.
————————————
Пока что
#новости_и_релизы_по_R
Ранее я уже рассказывал о пакете
Elmer
, который позволяет взаимодействовать с большими языковыми моделями (LLM) прямо из R. Сегодня мы углубимся в детали его функционала и возможностей, чтобы вы могли максимально эффективно использовать этот инструмент.1. Что такое Elmer?
Elmer
— это пакет из экосистемы tidyverse
, созданный для удобного использования LLM API. Его основные преимущества:● Мульти-провайдерная поддержка, на данный момент реализована поддержка:
● Anthropic’s Claude:
chat_claude()
.● AWS Bedrock:
chat_bedrock()
.● Azure OpenAI:
chat_azure()
.● Databricks:
chat_databricks()
.● GitHub model marketplace:
chat_github()
.● Google Gemini:
chat_gemini()
.● Groq:
chat_groq()
.● Ollama: chat_ollama()`.
● OpenAI: `chat_openai()`.
● perplexity.ai: `chat_perplexity()`.
● Snowflake Cortex: `chat_cortex()`.
Кстати, создатели `elmer` утверждают, что для генерации кода по их мнению лучше всего себя проявляет Anthropic’s Claude, т.е. Claude.ai, и я по этому поводу тоже уже своими наблюдениями делился.
● Гибкость в настройках промптов и диалогов.
● Извлечение структурированных данных из текста.
● Поддержка асинхронных вызовов для повышения производительности.
Эти функции делают Elmer мощным инструментом для анализа данных, автоматизации задач и разработки приложений.
2. Установка
Установите
elmer
с помощью:pak::pak("tidyverse/elmer")
3. Управление диалогами
Чат-объекты в
elmer
сохраняют историю, что упрощает многозадачные сценарии:chat <- chat_openai(model = "gpt-4o-mini")
4. Программные возможности
elmer
поддерживает несколько способов взаимодействия с LLM:4.1. Интерактивный режим: Используйте R-консоль для живого общения:
live_console(chat)
4.2. Программный режим: Создайте сценарий, возвращающий результаты для дальнейшей обработки:
my_function <- function() {
4.3. Асинхронные вызовы: Используйте асинхронный API для ускорения обработки больших объемов данных.
5. Извлечение структурированных данных
elmer
позволяет преобразовывать текст в удобный формат для анализа:● Анализ отзывов клиентов.
● Извлечение рецептов и их структурирование.
● Геокодирование адресов.
Пример:
chat$chat("Выдели ключевые слова из текста")
6. Работа с токенами
elmer
помогает отслеживать использование токенов для оптимизации затрат:chat$chat("Кто создал R?")
Один запрос к модели GPT-4o mini может стоить от $0.15 за миллион токенов, что делает использование API доступным для экспериментов.
7. Рекомендации по промптам
Правильный дизайн промптов — ключ к качественным ответам. Например:
● Укажите системные инструкции для кастомизации:
chat <- chat_openai(system_prompt = "Отвечай всегда кратко и на русском языке.")
● Используйте промпты для автоматизации, например, создания документации на основе README вашего пакета.
8. Кейсы использования
Elmer отлично подходит для:
● Создания чат-ботов для поддержки пользователей.
● Прототипирования инструментов: автоматизация анализа данных и отчетности.
● Кастомизации работы LLM под специфические задачи.
————————————
elmer
открывает новые горизонты для работы с LLM в R. Это не только инструмент для экспериментов, но и мощное средство для интеграции ИИ в ваши проекты. Узнайте больше из официальной документации.Пока что
elmer
по прежнему находится в активной стадии разработки, текущая версия 0.0.0.9000, но будем следить за этим процессом, и в ближайшее время буду ещё делиться информацией об этом проекте.#новости_и_релизы_по_R
01.11.202409:01
R4marketing 6 лет
Ровно 6 лет назад, 1 ноября 2018 года, я анонсировал в Facebook запуск этого канала. Это было время, когда Telegram только набирал популярность как платформа для профессионального контента, и я решил создать пространство, где буду делиться знаниями и какими то заметками по языку R.
На данный момент в канале опубликовано 1256 постов, очень долгое время я держал темп в 1 пост каждый будний день, и не сбавлял его даже в периоды отпусков. Хотя сейчас темп публикаций уже не "пост каждый будний день", как было изначально, но я по-прежнему стараюсь делиться только действительно ценным контентом, который поможет вам в работе и профессиональном росте.
Спасибо каждому из вас за то, что остаётесь со мной все эти годы! Ваши комментарии, обратная связь и дискуссии делают этот канал живым и помогают развиваться всем нам.
Ровно 6 лет назад, 1 ноября 2018 года, я анонсировал в Facebook запуск этого канала. Это было время, когда Telegram только набирал популярность как платформа для профессионального контента, и я решил создать пространство, где буду делиться знаниями и какими то заметками по языку R.
На данный момент в канале опубликовано 1256 постов, очень долгое время я держал темп в 1 пост каждый будний день, и не сбавлял его даже в периоды отпусков. Хотя сейчас темп публикаций уже не "пост каждый будний день", как было изначально, но я по-прежнему стараюсь делиться только действительно ценным контентом, который поможет вам в работе и профессиональном росте.
Спасибо каждому из вас за то, что остаётесь со мной все эти годы! Ваши комментарии, обратная связь и дискуссии делают этот канал живым и помогают развиваться всем нам.
18.09.202408:02
Округление в R
Вчера мы столкнулись с расхождением в расчёте LT на одних и тех же данных в Power BI и R. После некоторого ресёрча я понял, что разница была в округлении. Функция
Впервые для себя я узнал, что функция
Банковское округление:
● Числа с десятичной частью .5 округляются до ближайшего чётного целого числа.
● Например, 2.5 округляется до 2, а 3.5 округляется до 4.
Математическое округление:
● Числа с десятичной частью .5 всегда округляются вверх.
● Например, 2.5 округляется до 3, а 3.5 тоже округляется до 4.
То есть если вы через
Как оказалось, в базовом R вообще нет функции для математического округления. Поэтому если вдруг вам понадобится где-то использовать математическое округление, которое мы с вами учили в школе, придётся писать собственную функцию. Ниже приведена функция, которая математическим способом округляет дробные числа до целого:
Если вы хотите иметь возможность указать количество разрядов после запятой, то используйте эту функцию:
#заметки_по_R
Вчера мы столкнулись с расхождением в расчёте LT на одних и тех же данных в Power BI и R. После некоторого ресёрча я понял, что разница была в округлении. Функция
round()
в R округлила число 6.5 до 6, а Power BI - до 7.Впервые для себя я узнал, что функция
round()
использует не привычный нам математический способ округления, а так называемый банковский. Вот в чём их отличия:Банковское округление:
● Числа с десятичной частью .5 округляются до ближайшего чётного целого числа.
● Например, 2.5 округляется до 2, а 3.5 округляется до 4.
Математическое округление:
● Числа с десятичной частью .5 всегда округляются вверх.
● Например, 2.5 округляется до 3, а 3.5 тоже округляется до 4.
То есть если вы через
round()
попробуете округлить числа 2.5, 4.5, 6.5, то получите соответственно 2, 4, 6, а не ожидаемые 3, 5, 7.Как оказалось, в базовом R вообще нет функции для математического округления. Поэтому если вдруг вам понадобится где-то использовать математическое округление, которое мы с вами учили в школе, придётся писать собственную функцию. Ниже приведена функция, которая математическим способом округляет дробные числа до целого:
round_math <- function(x) {
Если вы хотите иметь возможность указать количество разрядов после запятой, то используйте эту функцию:
custom_round <- function(x, digits = 0) {
#заметки_по_R
14.08.202408:00
Новый урок на YouTube: Развёртывание Telegram-бота в Google Cloud Run!
Привет, друзья!
Не так давно я рассказывал о том, что работаю над новой главой книги по разработке telegram ботов на R. Так вот, мы на финишной прямой нашего пути по созданию Telegram-ботов, и я рад представить вам новый видеоурок, в котором мы освоим важный шаг — развертывание бота в облаке с помощью Google Cloud Run!
В этом видео вы узнаете:
● Что такое Google Cloud Run и как он поможет вашему боту
● Как настроить и развернуть бота в облаке
● Основы технологии Webhook и Docker
● Пошаговое руководство по созданию, сборке и запуску Docker образа
Тайм-коды:
00:00 Вступление
00:37 Какой софт нам потребуется
01:25 Что такое Google Cloud Run
02:45 Обзор рабочего процесса
04:30 Код бота
05:20 Технология Webhook
10:44 Обзор Dockerfile
14:33 Локальная сборка Docker образа
17:35 Настройка проекта в Google Cloud
19:45 Инициализация Google Cloud SDK
22:10 Тегирование и пушинг Docker образа
23:04 Первый запуск бота
24:14 Корректировка WEBHOOK_URL
25:33 Пересборка и пушинг Docker образа
27:03 Развёртывание в Google Cloud Run
27:14 Проверка бота
28:10 Заключение
Ссылки:
● Видео урок
#видео_уроки_по_R
Привет, друзья!
Не так давно я рассказывал о том, что работаю над новой главой книги по разработке telegram ботов на R. Так вот, мы на финишной прямой нашего пути по созданию Telegram-ботов, и я рад представить вам новый видеоурок, в котором мы освоим важный шаг — развертывание бота в облаке с помощью Google Cloud Run!
В этом видео вы узнаете:
● Что такое Google Cloud Run и как он поможет вашему боту
● Как настроить и развернуть бота в облаке
● Основы технологии Webhook и Docker
● Пошаговое руководство по созданию, сборке и запуску Docker образа
Тайм-коды:
00:00 Вступление
00:37 Какой софт нам потребуется
01:25 Что такое Google Cloud Run
02:45 Обзор рабочего процесса
04:30 Код бота
05:20 Технология Webhook
10:44 Обзор Dockerfile
14:33 Локальная сборка Docker образа
17:35 Настройка проекта в Google Cloud
19:45 Инициализация Google Cloud SDK
22:10 Тегирование и пушинг Docker образа
23:04 Первый запуск бота
24:14 Корректировка WEBHOOK_URL
25:33 Пересборка и пушинг Docker образа
27:03 Развёртывание в Google Cloud Run
27:14 Проверка бота
28:10 Заключение
Ссылки:
● Видео урок
#видео_уроки_по_R
31.07.202408:02
11.02.202508:59
Разбираем функцию exec() из пакета rlang
Друзья! Сегодня разберём функцию
Что такое exec()?
Базовый синтаксис:
Практические примеры использования
1. Работа с API
2. Генерация отчётов
3. Обработка данных с динамическими параметрами
Советы
● Кэширование параметров
● Валидация параметров
————————————
● Работаете с конфигурируемыми параметрами
● Создаёте wrapper-функции для API
● Автоматизируете генерацию отчётов
● Обрабатываете данные из разных источников
#заметки_по_R
Друзья! Сегодня разберём функцию
exec()
. Если вы работаете с API, создаёте отчёты или автоматизируете рабочие процессы - этот инструмент значительно упростит вашу жизнь.Что такое exec()?
exec()
- это современная альтернатива базовой функции do.call()
. Она позволяет динамически вызывать функции с аргументами, которые хранятся в списке или других структурах данных.Базовый синтаксис:
exec(fn, !!!args)
Практические примеры использования
1. Работа с API
# Конфигурация для разных API endpoints
2. Генерация отчётов
# Параметры для разных типов отчётов
3. Обработка данных с динамическими параметрами
Советы
● Кэширование параметров
# Создаём кэш часто используемых параметров
● Валидация параметров
validate_and_exec <- function(fn, args) {
————————————
exec()
- это не просто замена do.call()
, а мощный инструмент для создания гибкого и поддерживаемого кода. Особенно полезен когда:● Работаете с конфигурируемыми параметрами
● Создаёте wrapper-функции для API
● Автоматизируете генерацию отчётов
● Обрабатываете данные из разных источников
#заметки_по_R
03.12.202409:01
Оптимизация функций в R: переосмысление аргументов с S7
Функции с множеством аргументов могут быть трудными для использования и сопровождения. Чтобы решить эту проблему, можно использовать подход с объектами опций (options objects), применяя возможности системы S7 (новая реализация ООП в R о которой мы недавно говорили). Рассмотрим пример, как можно переработать функцию readr::read_csv().
Проблема: слишком много параметров
Функция
● Сократить количество аргументов в функции.
● Улучшить читаемость и поддерживаемость кода.
● Обеспечить строгую типизацию параметров.
Шаг 1: Создание свойств с помощью new_property()
Для начала определим свойства, которые будут использоваться в нашем объекте опций. Например, свойство для параметра `locale:
Этот код задает значения по умолчанию и проверяет, что все элементы
Подобным образом мы можем создать объекты опций для большинства других аргументов:
●
●
●
●
●
●
●
●
●
●
●
●
●
Шаг 2: Создание класса с помощью new_class()
Теперь создадим класс для объекта опций, который объединяет все свойства, включая
Такой подход позволяет гибко задавать опции с использованием строгой типизации.
Шаг 3: Переопределение функции read_csv()
После создания объекта опций можно переопределить функцию read_csv() для работы с новым подходом:
Вместо передачи множества опциональных аргументов пользователь может передать объект
————————————
Использование объектов опций с
Ссылки:
● В основе поста лежит статья "S7 & Options objects"
#заметки_по_R
Функции с множеством аргументов могут быть трудными для использования и сопровождения. Чтобы решить эту проблему, можно использовать подход с объектами опций (options objects), применяя возможности системы S7 (новая реализация ООП в R о которой мы недавно говорили). Рассмотрим пример, как можно переработать функцию readr::read_csv().
Проблема: слишком много параметров
Функция
readr::read_csv()
имеет более 20 аргументов, многие из которых редко используются, например, locale
, skip
, na
. Перенос менее востребованных настроек в объект опций позволяет:● Сократить количество аргументов в функции.
● Улучшить читаемость и поддерживаемость кода.
● Обеспечить строгую типизацию параметров.
Шаг 1: Создание свойств с помощью new_property()
Для начала определим свойства, которые будут использоваться в нашем объекте опций. Например, свойство для параметра `locale:
library(S7)
Этот код задает значения по умолчанию и проверяет, что все элементы
locale
имеют правильный тип.Подобным образом мы можем создать объекты опций для большинства других аргументов:
●
na
●
quote
●
comment
●
trim_ws
●
skip
●
n_max
●
guess_max
●
name_repair
●
num_threads
●
progress
●
show_col_types
●
skip_empty_rows
●
lazy
Шаг 2: Создание класса с помощью new_class()
Теперь создадим класс для объекта опций, который объединяет все свойства, включая
locale
, na
, trim_ws
и другие:class_readr_opts <- new_class(
Такой подход позволяет гибко задавать опции с использованием строгой типизации.
Шаг 3: Переопределение функции read_csv()
После создания объекта опций можно переопределить функцию read_csv() для работы с новым подходом:
read_csv <- function(
Вместо передачи множества опциональных аргументов пользователь может передать объект
options
, упростив вызов и настройку функции.————————————
Использование объектов опций с
S7
позволяет уменьшить сложность функций, сделать их более читаемыми и строго типизированными. Такой подход особенно полезен при разработке библиотек и сложных API.Ссылки:
● В основе поста лежит статья "S7 & Options objects"
#заметки_по_R
22.10.202408:01
Релиз patchwork 1.3.0
Вышла версия
Также доступны более продвинутые возможности для компоновки графиков и таблиц. Например, можно использовать сложный макет с элементами разного размера:
Это позволяет гибко управлять макетом визуализации, комбинируя таблицы и графики разных типов.
Ссылки:
● Подробнее можно прочитать в оригинальной статье на Tidyverse Blog.
● Также ранее я уже рассказывал о пакете
#новости_и_релизы_по_R
Вышла версия
patchwork 1.3.0
, которая привнесла интересные возможности для работы с таблицами в графических композициях. Теперь можно легко интегрировать таблицы gt
с графиками, используя функции wrap_elements()
и wrap_table()
. Пример простого графика с таблицей:library(patchwork)
Также доступны более продвинутые возможности для компоновки графиков и таблиц. Например, можно использовать сложный макет с элементами разного размера:
p1 <- ggplot(mtcars) +
Это позволяет гибко управлять макетом визуализации, комбинируя таблицы и графики разных типов.
Ссылки:
● Подробнее можно прочитать в оригинальной статье на Tidyverse Blog.
● Также ранее я уже рассказывал о пакете
patchwork
в посте "Как расположить несколько ggplot2 графиков на одном изображении".#новости_и_релизы_по_R
04.09.202408:04
Судя по всему Хедли взялся за разработку пакета-обёртки над API различных LLM моделей, т.е. ChatGPT и иже с ним.
Пока в довольно лаконичном README к пакету
Для работы с пакетом необходимо получить API ключ, и сохранить его в переменную среды
Далее пример к одной из основных функций пакета:
Так что ждём подробностей и релизов, ссылка на репозиторий пакета на GitHub.
#релизы_и_новости_по_R
Пока в довольно лаконичном README к пакету
elmer
пишется следующее:Цель elmer — предоставить удобную для пользователя оболочку для наиболее распространенных API-интерфейсов для вызова llm. Основные цели разработки включают поддержку потоковой передачи и упрощение регистрации и вызова функций R.
Для работы с пакетом необходимо получить API ключ, и сохранить его в переменную среды
OPENAI_API_KEY
, (usethis::use_renviron()
).Далее пример к одной из основных функций пакета:
chat <- new_chat()
Так что ждём подробностей и релизов, ссылка на репозиторий пакета на GitHub.
#релизы_и_новости_по_R
06.08.202408:03
Как настроить запуск R скриптов по расписанию в Google Cloud Run
Продолжаем изучать тему удалённой автоматизации запуска ваших скриптов. В этом видео мы погружаемся в мир Google Cloud Run и разбираемся с тем, как автоматизировать запуск R скриптов по расписанию. Мы подробно разберём каждый шаг — от настройки облачной платформы до создания Docker образа и его публикации. Итог — условно бесплатная автоматизированная система для выполнения скриптов без постоянного вмешательства.
Что вы узнаете из видео:
● Какой софт понадобится для настройки и запуска скриптов.
● Что такое Google Cloud Run и как он поможет автоматизировать задачи.
● Как настроить проект в Google Cloud для работы с R скриптами.
● Как создать Docker образ и развернуть его в облаке.
● Как настроить регулярный запуск скрипта с помощью триггеров.
Тайм-коды:
00:00 Введение
00:32 Какой софт нам понадобится
01:01 Что такое Google Cloud Run
02:25 Обзор рабочего процесса
03:26 Создание и настройка проекта в Google Cloud
05:36 Обзор R скрипта, который мы будет запускать по расписанию
07:07 Создание Dockerfile
09:54 Локальная сборка Docker образа и запуск контейнера
11:51 Инициализация проекта Google Cloud с Google Cloud SDK Shell
13:43 Отправка Docker образа в Google Container Registry
14:33 Создание Job в Google Cloud Run
16:07 Создание триггера для запуска скрипта по расписанию
18:31 Заключение
Полезные ссылки, которые я упоминаю в видео:
● Как создать Telegram бота и получить токен
● Как упаковать Telegram бота в Docker
● Курс по разработке Telegram ботов на R
Не забывайте подписываться на YouTube канал!
#видео_уроки_по_R
Продолжаем изучать тему удалённой автоматизации запуска ваших скриптов. В этом видео мы погружаемся в мир Google Cloud Run и разбираемся с тем, как автоматизировать запуск R скриптов по расписанию. Мы подробно разберём каждый шаг — от настройки облачной платформы до создания Docker образа и его публикации. Итог — условно бесплатная автоматизированная система для выполнения скриптов без постоянного вмешательства.
Что вы узнаете из видео:
● Какой софт понадобится для настройки и запуска скриптов.
● Что такое Google Cloud Run и как он поможет автоматизировать задачи.
● Как настроить проект в Google Cloud для работы с R скриптами.
● Как создать Docker образ и развернуть его в облаке.
● Как настроить регулярный запуск скрипта с помощью триггеров.
Тайм-коды:
00:00 Введение
00:32 Какой софт нам понадобится
01:01 Что такое Google Cloud Run
02:25 Обзор рабочего процесса
03:26 Создание и настройка проекта в Google Cloud
05:36 Обзор R скрипта, который мы будет запускать по расписанию
07:07 Создание Dockerfile
09:54 Локальная сборка Docker образа и запуск контейнера
11:51 Инициализация проекта Google Cloud с Google Cloud SDK Shell
13:43 Отправка Docker образа в Google Container Registry
14:33 Создание Job в Google Cloud Run
16:07 Создание триггера для запуска скрипта по расписанию
18:31 Заключение
Полезные ссылки, которые я упоминаю в видео:
● Как создать Telegram бота и получить токен
● Как упаковать Telegram бота в Docker
● Курс по разработке Telegram ботов на R
Не забывайте подписываться на YouTube канал!
#видео_уроки_по_R
31.07.202408:02
06.02.202505:03
Рекурсивные операции в R: Магия функции accumulate()
1. Пример 1: Накопительная сумма
Как это работает?:
● Начинает с первого элемента (1)
● Каждый следующий шаг - сумма предыдущего накопленного результата и текущего элемента
● 1 → (1+2=3) → (3+3=6) → (6+4=10) → (10+5=15)
Пример 2: Генерация последовательности Фибоначчи
Детали реализации:
●
● На каждой итерации берем второй элемент и сумму
● Создаем классическую последовательность Фибоначчи
Пример 3: Сложная трансформация данных
Сценарий:
● Накапливаем статистику по транзакциям
● Считаем общую сумму, налоги, количество обработанных записей
● Используем аккумуляцию для последовательной обработки
————————————
В пакете
Тему циклов и функционалов я подробно рассматривал в бесплатном курсе "Циклы и функционалы в языке R", так что если есть желание погрузится в эту тему то велкам!
#заметки_по_R
accumulate()
из пакета purrr
- потрясающий инструмент для выполнения рекурсивных вычислений в R. Давайте рассмотрим три последовательных примера от простого к сложному.1. Пример 1: Накопительная сумма
library(purrr)
Как это работает?:
● Начинает с первого элемента (1)
● Каждый следующий шаг - сумма предыдущего накопленного результата и текущего элемента
● 1 → (1+2=3) → (3+3=6) → (6+4=10) → (10+5=15)
Пример 2: Генерация последовательности Фибоначчи
fibonacci <- accumulate(1:10, function(acc, _) {
Детали реализации:
●
.init
устанавливает начальное состояние● На каждой итерации берем второй элемент и сумму
● Создаем классическую последовательность Фибоначчи
Пример 3: Сложная трансформация данных
library(dplyr)
Сценарий:
● Накапливаем статистику по транзакциям
● Считаем общую сумму, налоги, количество обработанных записей
● Используем аккумуляцию для последовательной обработки
————————————
В пакете
purrr
помимо accumulate()
есть множество других полезных функционалов, которые могут заменить вам циклы for
, и сделать ваш код более читабельным и оптимизированным. Тему циклов и функционалов я подробно рассматривал в бесплатном курсе "Циклы и функционалы в языке R", так что если есть желание погрузится в эту тему то велкам!
#заметки_по_R
27.11.202409:00
Мобильные приложения с R: революция благодаря webR
Мир R и мобильных технологий стал на шаг ближе с выходом
Что такое webR и в чем его уникальность?
Ключевые особенности
● Нет необходимости в R-сервере.
● Полноценная работа с R-кодом в мобильной среде.
● Возможность использовать стандартные функции R для анализа данных и визуализации.
● Эта технология изменяет представление о том, где и как можно применять R, делая его доступным для разработчиков мобильных приложений.
Почему это важно?
До появления
● Ограниченная функциональность: отсутствие доступа к API устройства, таких как камера, вибрация, или геолокация.
● Нет автономности: такие приложения требовали постоянного подключения к серверу.
● Сложности с установкой: их нельзя было загрузить из App Store или Google Play.
● Устанавливаются через магазины приложений.
● Работают офлайн.
● Интегрируют функции смартфона.
Пример реализации: Игра на основе R
ThinkR представили рабочий прототип — мобильное приложение с интеграцией R-кода. Это игра, где пользователи угадывают, к какому пакету R принадлежит случайная функция.
Как работает приложение:
● Оно выбирает три случайных пакета из установленных.
● Генерирует функцию из одного из них.
● Пользователь угадывает, к какому пакету она относится.
Функционал включает:
● Локальное хранение данных о попытках пользователя в SQLite.
● Визуализацию прогресса на графиках.
● Поддержку вибрации, автономного режима и других мобильных API.
Этот проект демонстрирует не только возможности webR, но и задает направление для будущих приложений.
Что дальше?
Разработчики ThinkR работают над выпуском приложения в App Store и Google Play. Этот проект — шаг к тому, чтобы сделать R универсальным инструментом, доступным не только для серверных решений, но и для мобильной разработки.
Если вы хотите быть в курсе новостей, посетите официальный сайт ThinkR, где можно подписаться на уведомления о выходе приложения.
————————————
#новости_и_релизы_по_R
Мир R и мобильных технологий стал на шаг ближе с выходом
webR
— WebAssembly-компиляции R. Эта технология позволяет запускать R-код прямо в JavaScript-средах, открывая новые возможности для создания мобильных приложений. В этом посте разбираем, как это работает и что это значит для разработчиков.Что такое webR и в чем его уникальность?
webR
— это специальная версия R, адаптированная для работы в WebAssembly. Если раньше R использовался преимущественно для серверных приложений (например, через Shiny
), то теперь его можно внедрять прямо в браузеры и мобильные устройства.Ключевые особенности
webR
:● Нет необходимости в R-сервере.
● Полноценная работа с R-кодом в мобильной среде.
● Возможность использовать стандартные функции R для анализа данных и визуализации.
● Эта технология изменяет представление о том, где и как можно применять R, делая его доступным для разработчиков мобильных приложений.
Почему это важно?
До появления
webR
мобильные приложения, использующие R, в основном реализовывались через Shiny
и shinyMobile
. Однако такие решения имели ряд ограничений:● Ограниченная функциональность: отсутствие доступа к API устройства, таких как камера, вибрация, или геолокация.
● Нет автономности: такие приложения требовали постоянного подключения к серверу.
● Сложности с установкой: их нельзя было загрузить из App Store или Google Play.
webR
решает эти проблемы, позволяя создавать настоящие нативные мобильные приложения, которые:● Устанавливаются через магазины приложений.
● Работают офлайн.
● Интегрируют функции смартфона.
Пример реализации: Игра на основе R
ThinkR представили рабочий прототип — мобильное приложение с интеграцией R-кода. Это игра, где пользователи угадывают, к какому пакету R принадлежит случайная функция.
Как работает приложение:
● Оно выбирает три случайных пакета из установленных.
● Генерирует функцию из одного из них.
● Пользователь угадывает, к какому пакету она относится.
Функционал включает:
● Локальное хранение данных о попытках пользователя в SQLite.
● Визуализацию прогресса на графиках.
● Поддержку вибрации, автономного режима и других мобильных API.
Этот проект демонстрирует не только возможности webR, но и задает направление для будущих приложений.
Что дальше?
Разработчики ThinkR работают над выпуском приложения в App Store и Google Play. Этот проект — шаг к тому, чтобы сделать R универсальным инструментом, доступным не только для серверных решений, но и для мобильной разработки.
Если вы хотите быть в курсе новостей, посетите официальный сайт ThinkR, где можно подписаться на уведомления о выходе приложения.
————————————
webR
— это революционная технология, которая может значительно изменить подход к созданию приложений. Это важный шаг для популяризации R за пределами традиционных областей его применения.#новости_и_релизы_по_R
09.10.202408:00
Работа с динамическими именами столбцов в dplyr: sym(), syms() и оператор !!
Часто при работе с данными в R возникает необходимость обращаться к столбцам таблицы по их именам, которые могут передаваться как строки. Это может быть полезно, если имена столбцов не известны заранее или задаются динамически в функциях. В
Проблема:
Обычно в dplyr мы обращаемся к столбцам напрямую, как показано ниже:
Но что, если имена столбцов будут передаваться в виде строк, например через аргументы функции? Простое использование строк в
Решение: sym() и оператор !!
Функция
В этой функции:
Оператор
Работа с несколькими столбцами: syms()
Если вам нужно работать сразу с несколькими столбцами, то для преобразования списка строк в символы можно использовать функцию syms().
Здесь:
————————————
Использование функций
О подобных примерах рассказано в виньетке "Программирование с dplyr".
#заметки_по_R
Часто при работе с данными в R возникает необходимость обращаться к столбцам таблицы по их именам, которые могут передаваться как строки. Это может быть полезно, если имена столбцов не известны заранее или задаются динамически в функциях. В
dplyr
для таких задач существует механизм tidy evaluation, и одними из ключевых инструментов являются функции sym()
, syms()
и оператор !!
.Проблема:
Обычно в dplyr мы обращаемся к столбцам напрямую, как показано ниже:
library(dplyr)
Но что, если имена столбцов будут передаваться в виде строк, например через аргументы функции? Простое использование строк в
filter()
не сработает.Решение: sym() и оператор !!
Функция
sym()
преобразует строку в символ (символ — это объект, который может быть интерпретирован как имя переменной), а оператор !!
используется для развертывания этого символа в выражении. Давайте рассмотрим, как это работает:library(dplyr)
В этой функции:
sym(col_name1)
и sym(col_name2)
преобразуют строки в символы, которые затем могут использоваться в dplyr::filter()
.Оператор
!!
разворачивает символ в выражении, позволяя использовать его как имя переменной в функции filter()
.Работа с несколькими столбцами: syms()
Если вам нужно работать сразу с несколькими столбцами, то для преобразования списка строк в символы можно использовать функцию syms().
library(dplyr)
Здесь:
syms(col_names)
преобразует вектор строк в список символов.across()
вместе с all_of()
позволяет удобно применить фильтр ко всем указанным столбцам.————————————
Использование функций
sym()
, syms()
и оператора !!
— это мощный инструмент для написания гибкого и динамического кода в R. Он особенно полезен при работе с большими данными и пакетами вроде dplyr, когда имена столбцов не известны заранее или приходят из пользовательского ввода.О подобных примерах рассказано в виньетке "Программирование с dplyr".
#заметки_по_R
29.08.202407:59
Новая глава в учебнике "Разработка Telegram ботов на языке R"
Не так давно я говорил о том, что работаю над новой главой учебника, и предыдущие 3 видео как раз были её дополнением.
В учебник добавлена 9 глава "Разворачиваем telegram бота в облачных сервисах", из которой вы узнаете:
● О том что такое Google Cloud Run и Heroku.
● Как запустить бота или настроить запуск своих скриптов по расписанию в упомянутых выше платформах.
● О преимуществах и недостатках каждой из платформ.
Содержание главы:
1. Google Cloud Run
1.1 Условные обозначения
1.2 Введение в Google Cloude Run
1.3 Как настроить запуск скрипта по расписанию с помощью Google Cloude Run Job
1.4 Разворачиваем Telegram бота в Google Cloud Run Service
2. Heroku
2.1 Разворачиваем telegram бота на Heroku
2.2 Как настроить запуск R скрипта по расписанию в Heroku
3. Какую из описанных облачных платформ выбрать
3.1 Преимущества Heroku
3.2 Преимущества Google Cloud Run
3.3 Итог
4. Заключение
#онлайн_книги_по_R
Не так давно я говорил о том, что работаю над новой главой учебника, и предыдущие 3 видео как раз были её дополнением.
В учебник добавлена 9 глава "Разворачиваем telegram бота в облачных сервисах", из которой вы узнаете:
● О том что такое Google Cloud Run и Heroku.
● Как запустить бота или настроить запуск своих скриптов по расписанию в упомянутых выше платформах.
● О преимуществах и недостатках каждой из платформ.
Содержание главы:
1. Google Cloud Run
1.1 Условные обозначения
1.2 Введение в Google Cloude Run
1.3 Как настроить запуск скрипта по расписанию с помощью Google Cloude Run Job
1.4 Разворачиваем Telegram бота в Google Cloud Run Service
2. Heroku
2.1 Разворачиваем telegram бота на Heroku
2.2 Как настроить запуск R скрипта по расписанию в Heroku
3. Какую из описанных облачных платформ выбрать
3.1 Преимущества Heroku
3.2 Преимущества Google Cloud Run
3.3 Итог
4. Заключение
#онлайн_книги_по_R
02.08.202408:00
Обновления в книге по созданию Telegram-ботов!
Привет, друзья! Рад сообщить вам о свежих обновлениях в моей книге. Вот что нового:
● Новая обложка: Книга обзавелась новым дизайном.
● Глава 1: В раздел [Создаём бота, и отправляем с его помощью сообщения в Telegram] добавлен новый раздел [Настраиваем запуск расписания отправки сообщения с помощью GitHub Actions]. Теперь вы узнаете, как автоматизировать отправку сообщений с помощью мощных инструментов CI/CD.
● Глава 2: В раздел [Добавляем боту поддержку команд и фильтры сообщений, класс Updater] добавлен новый раздел [Обработка голосовых сообщений. Переводим голосовое сообщение в текст]. Мы рассмотрим, как преобразовать голосовые сообщения в текст и приведём пример бота, выполняющего эту задачу.
● Глава 2: Также добавлен новый раздел [Бот для сбора статистики из Telegram чатов]. Вы научитесь создавать бота, который собирает и анализирует статистику из чатов, что может быть полезно для анализа активности и взаимодействия.
● Предисловие и заключение: К книге добавлены новые предисловие и заключение, чтобы дать вам лучшее представление о содержании и итогах работы.
● Обновления в каждой главе: Предисловия и заключения в каждой главе переписаны для лучшего понимания материала и плавного перехода между темами.
В данный момент я работаю над новой главой книги, и буду рад поделиться с вами новыми подробностями, как только они будут готовы.
#онлайн_книги_по_R
Привет, друзья! Рад сообщить вам о свежих обновлениях в моей книге. Вот что нового:
● Новая обложка: Книга обзавелась новым дизайном.
● Глава 1: В раздел [Создаём бота, и отправляем с его помощью сообщения в Telegram] добавлен новый раздел [Настраиваем запуск расписания отправки сообщения с помощью GitHub Actions]. Теперь вы узнаете, как автоматизировать отправку сообщений с помощью мощных инструментов CI/CD.
● Глава 2: В раздел [Добавляем боту поддержку команд и фильтры сообщений, класс Updater] добавлен новый раздел [Обработка голосовых сообщений. Переводим голосовое сообщение в текст]. Мы рассмотрим, как преобразовать голосовые сообщения в текст и приведём пример бота, выполняющего эту задачу.
● Глава 2: Также добавлен новый раздел [Бот для сбора статистики из Telegram чатов]. Вы научитесь создавать бота, который собирает и анализирует статистику из чатов, что может быть полезно для анализа активности и взаимодействия.
● Предисловие и заключение: К книге добавлены новые предисловие и заключение, чтобы дать вам лучшее представление о содержании и итогах работы.
● Обновления в каждой главе: Предисловия и заключения в каждой главе переписаны для лучшего понимания материала и плавного перехода между темами.
В данный момент я работаю над новой главой книги, и буду рад поделиться с вами новыми подробностями, как только они будут готовы.
#онлайн_книги_по_R
23.07.202408:01
Сравнение Chat GPT с Claude AI в рабочих кейсах дата аналитика
Друзья, ChatGPT однозначно является одной из наиболее мощных и популярных LLM (Large Language Model), но это не единственный инструмент в данной категории. Недавно я рассказал о том, как использую персонализированные ChatGPT в своей работе, и поделился четырьмя рабочими кейсами в видео.
В этот раз я решил сравнить ответы кастомных ChatGPT 4 из моего видео с тем, что предложила другая LLM — Claude AI (3.5 Sonnet). Результат оказался для меня неожиданным.
Забегая наперёд, скажу, что Claude AI — условно бесплатная нейросеть.
Ниже приведено сравнение всех четырёх кейсов, о которых я рассказывал в своём видео.
==================================
Кейс #1: Генерация кода для получение курса валют
Промпт:
Результат:
Claude AI предложил больше вариантов реализации. Самый первый вариант с использованием пакета
✅Лучший ответ дал Claude AI.
==================================
Кейс #2: Генерация справочников из столбцов таблиц в Power BI
Промпт:
Результат:
Claude AI сразу дал готовый работающий код, не смотря на некоторую неточность в промпте, предложенный код достаточно было просто скопировать и вставить в Power BI, при этом дал мне 4 отдельных блока кода для каждого справочника. ChatGPT после исправления неточности в промпте дал один код генерирующий массив справочников, и далее его потребовалось немного дорабатывать для генерации каждого отдельного справочника.
✅Лучший ответ дал Claude AI.
==================================
Кейс #3: Написание запроса к API по скриншоту из Postman
Промпт:
Результат:
Claude AI справился с задачей с первой попытки, сразу сгенерировав корректный код. ChatGPT потребовалось несколько итераций и мои подсказки.
✅Лучший ответ дал Claude AI.
Кейс #4: Перевод кода Python на R
Промпт:
Результат:
С задачей не справился ни Claude AI, ни ChatGPT, но Claude AI объяснил, что в R нет реализации метода BlowFish и что за пару итераций он не смог его реализовать.
==================================
Вывод:
Пока по моим тестам Claude AI показал себя даже лучше чем кастомные ChatGPT, так что не стоит зацикливаться только на какой то одной LLM, тестируйте разные на своих задачах, проверяйте какая модель даёт более точные ответы, какая работает быстрее.
Пока что меня приятно удивил Claude AI.
Друзья, ChatGPT однозначно является одной из наиболее мощных и популярных LLM (Large Language Model), но это не единственный инструмент в данной категории. Недавно я рассказал о том, как использую персонализированные ChatGPT в своей работе, и поделился четырьмя рабочими кейсами в видео.
В этот раз я решил сравнить ответы кастомных ChatGPT 4 из моего видео с тем, что предложила другая LLM — Claude AI (3.5 Sonnet). Результат оказался для меня неожиданным.
Забегая наперёд, скажу, что Claude AI — условно бесплатная нейросеть.
Ниже приведено сравнение всех четырёх кейсов, о которых я рассказывал в своём видео.
==================================
Кейс #1: Генерация кода для получение курса валют
Промпт:
Мне ежедневно надо получать с помощью языка курсы валют и получать курс относительно USD, при чём список этих валют может изменяться, напиши мне несколько вариантов кода для этого, сначала с помощью определённых пакетов, потом с помощью каких нибудь бесплатных API. Давай для примера возьмём такие валютные пары: KZT, UAH, BGN, GBP, нужен их курс относительно USD. На выходе я хочу получить таблицу date — дата курса, curfrom — из какой валюты конвертируем, curto — в какую валюту тут всегда будет USD, curbid — значение курса валюты.
Результат:
Claude AI предложил больше вариантов реализации. Самый первый вариант с использованием пакета
quantmod
был полностью корректным, в отличие от ChatGPT, который возвращал обратный курс.✅Лучший ответ дал Claude AI.
==================================
Кейс #2: Генерация справочников из столбцов таблиц в Power BI
Промпт:
При разработке модели данных в Power BI у меня было 2 таблицы, одна с плановыми показателями, другая с фактическими. Обе таблицы содержали 4 одинаковых параметра, по которых их надо было связать. Но т.к. могли попадаться сегменты отсутствующие либо в фактической таблице, либо в плановой, мне необходимо было сначала вертикально объединить эти таблицы, потом по очереди взять уникальные значения из 4 столбцов, и создать на их основе 4 справочника.
Результат:
Claude AI сразу дал готовый работающий код, не смотря на некоторую неточность в промпте, предложенный код достаточно было просто скопировать и вставить в Power BI, при этом дал мне 4 отдельных блока кода для каждого справочника. ChatGPT после исправления неточности в промпте дал один код генерирующий массив справочников, и далее его потребовалось немного дорабатывать для генерации каждого отдельного справочника.
✅Лучший ответ дал Claude AI.
==================================
Кейс #3: Написание запроса к API по скриншоту из Postman
Промпт:
Я тебе скину скрин из Postman, напиши мне пример кода на R с пакетом httr2 что бы воспроизвести такой запрос, но учитывай что массив taskIds может быть переменной длинны, и содержать от 1 до 50 элементов, т.е. нужен универсальный подход, просто прописать taskIds[0] taskIds[1] неполучится.
Результат:
Claude AI справился с задачей с первой попытки, сразу сгенерировав корректный код. ChatGPT потребовалось несколько итераций и мои подсказки.
✅Лучший ответ дал Claude AI.
Кейс #4: Перевод кода Python на R
Промпт:
Я тебе ниже дам код написанный на языке Python, мне надо что бы ты переписал этот код на язык R с использованием R6 классов. Этот код принимает на вход зашифрованные данные, в основе шифрования лежит метод BlowFish, но не чистый а доработанный, и созданный там класс принимает ещё ключ шифрования и возвращает уже расшифрованные данные. Вот код, перепиши его на R:
Результат:
С задачей не справился ни Claude AI, ни ChatGPT, но Claude AI объяснил, что в R нет реализации метода BlowFish и что за пару итераций он не смог его реализовать.
==================================
Вывод:
Пока по моим тестам Claude AI показал себя даже лучше чем кастомные ChatGPT, так что не стоит зацикливаться только на какой то одной LLM, тестируйте разные на своих задачах, проверяйте какая модель даёт более точные ответы, какая работает быстрее.
Пока что меня приятно удивил Claude AI.
Ko'rsatilgan 1 - 24 dan 51
Ko'proq funksiyalarni ochish uchun tizimga kiring.