Мир сегодня с "Юрий Подоляка"
Мир сегодня с "Юрий Подоляка"
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
Мир сегодня с "Юрий Подоляка"
Мир сегодня с "Юрий Подоляка"
Труха⚡️Україна
Труха⚡️Україна
Николаевский Ванёк
Николаевский Ванёк
R4marketing | канал Алексея Селезнёва | Язык R avatar

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

技术
Автор канала Алексей Селезнёв, украинский аналитик, автор ряда курсов по языку R и пакетов расширяющих его возможности.
В канале публикуются статьи, доклады, новости, уроки и заметки по языку R.
Для связи: @AlexeySeleznev
Реклама: http://bit.ly/39MwJCY
TGlist 评分
0
0
类型公开
验证
未验证
可信度
不可靠
位置Україна
语言其他
频道创建日期Aug 13, 2024
添加到 TGlist 的日期
Jun 15, 2023
关联群组

Telegram频道 R4marketing | канал Алексея Селезнёва | Язык R 统计数据

订阅者

4 431

24 小时
1
0%一周
7
-0.2%一个月
6
-0.1%

引用指数

0

提及0频道上的转发0频道上的提及0

每帖平均覆盖率

464

12 小时4480%24 小时4640%48 小时6290%

参与率 (ER)

8.41%

转发12评论0反应27

覆盖率参与率 (ERR)

0%

24 小时0%一周0%一个月0%

每则广告帖子的平均覆盖率

422

1 小时19646.45%1 – 4 小时9622.75%4 - 24 小时00%
将我们的机器人连接到频道以了解该频道的受众性别。
过去 24 小时内的帖子数
0
动态
-

"R4marketing | канал Алексея Селезнёва | Язык R" 群组最新帖子

Гибкий импорт в R 4.5 с помощью use()

Всем привет, давно я тут ничего не писал, надо понемногу исправляться.

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
Разбираем функцию exec() из пакета rlang

Друзья! Сегодня разберём функцию 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
Рекурсивные операции в R: Магия функции accumulate()

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
httr2 1.1.0

Команда Хэдли продолжает развивать 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
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
Оптимизация функций в R: переосмысление аргументов с S7

Функции с множеством аргументов могут быть трудными для использования и сопровождения. Чтобы решить эту проблему, можно использовать подход с объектами опций (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
Мобильные приложения с R: революция благодаря webR

Мир 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
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.

Установите пакет, чтобы попробовать новый подход к ООП:
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
R4marketing 6 лет

Ровно 6 лет назад, 1 ноября 2018 года, я анонсировал в Facebook запуск этого канала. Это было время, когда Telegram только набирал популярность как платформа для профессионального контента, и я решил создать пространство, где буду делиться знаниями и какими то заметками по языку R.

На данный момент в канале опубликовано 1256 постов, очень долгое время я держал темп в 1 пост каждый будний день, и не сбавлял его даже в периоды отпусков. Хотя сейчас темп публикаций уже не "пост каждый будний день", как было изначально, но я по-прежнему стараюсь делиться только действительно ценным контентом, который поможет вам в работе и профессиональном росте.

Спасибо каждому из вас за то, что остаётесь со мной все эти годы! Ваши комментарии, обратная связь и дискуссии делают этот канал живым и помогают развиваться всем нам.
Релиз patchwork 1.3.0

Вышла версия patchwork 1.3.0, которая привнесла интересные возможности для работы с таблицами в графических композициях. Теперь можно легко интегрировать таблицы gt с графиками, используя функции wrap_elements() и wrap_table(). Пример простого графика с таблицей:

library(patchwork)


Также доступны более продвинутые возможности для компоновки графиков и таблиц. Например, можно использовать сложный макет с элементами разного размера:

p1 <- ggplot(mtcars) +


Это позволяет гибко управлять макетом визуализации, комбинируя таблицы и графики разных типов.

Ссылки:
● Подробнее можно прочитать в оригинальной статье на Tidyverse Blog.
● Также ранее я уже рассказывал о пакете patchwork в посте "Как расположить несколько ggplot2 графиков на одном изображении".

#новости_и_релизы_по_R
Работа с динамическими именами столбцов в dplyr: sym(), syms() и оператор !!

Часто при работе с данными в 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
Динамическая вставка таблиц в RMarkdown

Допустим у вас есть большой дата фрейм, в котором есть один, или несколько столбцов, позволяющий разбить данные на какие то категории по отдельным таблицам, например по отделу, региону, или другому признаку. Далее в RMarkdown вам необходимо каждую подтаблицу напечатать отдельно, при этом количество этих категорий может меняться, ниже я покажу один из способов сделать это.

Изначально вам необходимо с помощью функции split() разбить основную таблицу, на подтаблицы, о том как это сделать я уже рассказывал.

Теперь для того, что бы каждую подтаблицу вывести в RMarkdown как отдельную таблицу необходимо пройтись по списку подтаблиц, например с помощью функции purrr:walk(), и вывести по очереди их на печать.

Ниже небольшой пример кода, как это можно сделать:

library(knitr)


Этот код делает следующее:

1. Разбивает таблицу df на список подтаблиц;
2. Использует purrr::walk() для итерации по именам подтаблиц в нашем списке;
3. Создает HTML-таблицу для каждой подтаблицы с помощью kable();
4. Добавляет стили с kable_styling()
5. Выводит каждую таблицу в документ с помощью cat()
6. Добавляет пустые строки между таблицами для лучшей читаемости.

Надеюсь, этот подход будет полезен в вашей работе с RMarkdown. Если у вас возникнут вопросы или вы захотите поделиться своими методами работы с данными, пишите в комментариях!

#заметки_по_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
Судя по всему Хедли взялся за разработку пакета-обёртки над API различных LLM моделей, т.е. ChatGPT и иже с ним.

Пока в довольно лаконичном README к пакету elmer пишется следующее:

Цель elmer — предоставить удобную для пользователя оболочку для наиболее распространенных API-интерфейсов для вызова llm. Основные цели разработки включают поддержку потоковой передачи и упрощение регистрации и вызова функций R.


Для работы с пакетом необходимо получить API ключ, и сохранить его в переменную среды OPENAI_API_KEY, (usethis::use_renviron()).

Далее пример к одной из основных функций пакета:

chat <- new_chat()


Так что ждём подробностей и релизов, ссылка на репозиторий пакета на GitHub.

#релизы_и_новости_по_R
Новая глава в учебнике "Разработка 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

记录

17.12.202323:59
4.5K订阅者
11.02.202523:59
100引用指数
02.11.202323:59
647每帖平均覆盖率
29.01.202511:28
422广告帖子的平均覆盖率
09.08.202323:59
12.21%ER
02.11.202323:59
14.44%ERR
订阅者
引用指数
每篇帖子的浏览量
每个广告帖子的浏览量
ER
ERR
JAN '23JAN '24JAN '25

R4marketing | канал Алексея Селезнёва | Язык R 热门帖子

17.04.202507:59
Гибкий импорт в R 4.5 с помощью use()

Всем привет, давно я тут ничего не писал, надо понемногу исправляться.

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
登录以解锁更多功能。