Название языка, R , происходит от преемника языка S, а также от общей первой буквы авторов, Росса и Роберта. [11] В августе 1993 года Ихака и Джентльмен разместили двоичный файл R на StatLib — веб-сайте архива данных . [12] В то же время они объявили о публикации в списке рассылки s-news . [13] 5 декабря 1997 года R стал проектом GNU , когда была выпущена версия 0.60. [14] 29 февраля 2000 года была выпущена первая официальная версия 1.0. [15]
Базовые пакеты доступны сразу при запуске R и предоставляют необходимый синтаксис и команды для программирования, вычислений, создания графики, базовой арифметики и статистических функций. [19]
Пакет tidyverse объединяет несколько вспомогательных пакетов, которые предоставляют общий интерфейс для задач, связанных с доступом и обработкой « tidy data » [27] , данных, содержащихся в двумерной таблице с одной строкой для каждого наблюдения и одним столбцом для каждой переменной. [28]
Установка пакета происходит только один раз. Например, чтобы установить пакет tidyverse : [28]
> установить.пакеты ( "tidyverse" )
Чтобы загрузить функции, данные и документацию пакета, нужно выполнить функцию library(). Чтобы загрузить tidyverse : [a]
> # Имя пакета можно заключить в кавычки > library ( "tidyverse" )> # Но также имя пакета можно назвать без кавычек > library ( tidyverse )
Редакторы, поддерживающие R, включают Emacs , Vim через плагин Nvim-R, Kate , LyX через Sweave , WinEdt (сайт) и Jupyter (сайт).
Языки сценариев, поддерживающие R, включают Python (веб-сайт), Perl (веб-сайт), Ruby (исходный код), F# (веб-сайт) и Julia (исходный код).
Языки программирования общего назначения, поддерживающие R, включают Java через сервер сокетов Rserve и .NET C# (веб-сайт).
Статистические фреймворки, использующие R в фоновом режиме, включают Jamovi и JASP .
Сообщество
R Core Team была основана в 1997 году для поддержки исходного кода R. R Foundation for Statistical Computing был основан в апреле 2003 года для оказания финансовой поддержки. R Consortium — проект Linux Foundation по разработке инфраструктуры R.
R Journal — это академический журнал с открытым доступом ,в котором публикуются статьи короткого и среднего размера об использовании и разработке R. Он включает статьи о пакетах, советы по программированию, новости CRAN и новости фонда.
Сообщество R проводит множество конференций и личных встреч. Эти группы включают:
UseR!: ежегодная международная конференция пользователей R (веб-сайт)
Направления в области статистических вычислений (DSC) (веб-сайт)
Следующие примеры иллюстрируют базовый синтаксис языка и использование интерфейса командной строки. (Расширенный список стандартных возможностей языка можно найти в руководстве R «Введение в R». [34] )
В R обычно предпочтительным оператором присваивания является стрелка, состоящая из двух символов <-, хотя =в некоторых случаях ее можно использовать. [35]
> x <- 1 : 6 # Создать числовой вектор в текущей среде > y <- x ^ 2 # Создать вектор на основе значений x. > print ( y ) # Распечатать содержимое вектора. [1] 1 4 9 16 25 36> z <- x + y # Создать новый вектор, который является суммой x и y > z # Вернуть содержимое z в текущую среду. [1] 2 6 12 20 30 42> z_matrix <- matrix ( z , nrow = 3 ) # Создать новую матрицу, которая превращает вектор z в матричный объект 3x2 > z_matrix [,1] [,2] [1,] 2 20 [2,] 6 30 [3,] 12 42> 2 * t ( z_matrix ) - 2 # Транспонируем матрицу, умножаем каждый элемент на 2, вычитаем 2 из каждого элемента матрицы и возвращаем результаты на терминал. [,1] [,2] [,3] [1,] 2 10 22 [2,] 38 58 82> new_df <- data.frame ( t ( z_matrix ), row.names = c ( "A" , "B" )) # Создать новый объект data.frame, содержащий данные из транспонированной z_matrix, с именами строк 'A' и 'B' > names ( new_df ) <- c ( "X" , "Y" , "Z" ) # Установить имена столбцов new_df как X, Y и Z. > print ( new_df ) # Распечатать текущие результаты. XYZ A 2 6 12 B 20 30 42> new_df $ Z # Вывод столбца Z [1] 12 42> new_df $ Z == new_df [ 'Z' ] && new_df [ 3 ] == new_df $ Z # Доступ к столбцу data.frame Z можно получить с помощью синтаксиса $Z, ['Z'] или [3], и значения будут одинаковыми. [1] ИСТИНА> attribute ( new_df ) # Вывести атрибутивную информацию об объекте new_df $names [1] "X" "Y" "Z"$row.names [1] "А" "Б"$class [1] "data.frame"> attributes ( new_df ) $ row.names <- c ( "one" , "two" ) # Доступ к атрибуту row.names и его изменение; также можно сделать с помощью rownames() > new_df XYZ one 2 6 12 two 20 30 42
Структура функции
Одной из сильных сторон R является простота создания новых функций. [36] Объекты в теле функции остаются локальными для функции, и может быть возвращен любой тип данных. В R почти все функции и все определяемые пользователем функции являются замыканиями . [37]
Создайте функцию:
# Входные параметры — x и y. # Функция возвращает линейную комбинацию x и y. f <- function ( x , y ) { z <- 3 * x + 4 * y# явный оператор return() необязателен, его можно заменить просто `z` return ( z ) }
Можно определить функции, которые будут использоваться в качестве инфиксных операторов, с помощью специального синтаксиса `%name%`, где «имя» — это имя переменной функции:
Начиная с версии 4.1.0 функции можно записывать в короткой нотации, что полезно для передачи анонимных функций функциям более высокого порядка: [38]
> sapply ( 1 : 5 , \ ( i ) i ^ 2 ) # здесь \(i) то же самое, что и function(i) [1] 1 4 9 16 25
Оператор местной трубы
В версии R 4.1.0 был представлен собственный оператор конвейера , , [39]|> . Этот оператор позволяет пользователям объединять функции в цепочку одну за другой вместо вложенного вызова функции.
> nrow ( subset ( mtcars , cyl == 4 )) # Вложенный без символа вертикальной черты [1] 11> mtcars |> subset ( cyl == 4 ) |> nrow () # Использование символа вертикальной черты [1] 11
Другой альтернативой вложенным функциям, в отличие от использования символа конвейера, является использование промежуточных объектов. Однако некоторые утверждают, что использование оператора конвейера создаст код, который будет легче читать. [28]
В примере summaryпредставлена универсальная функция , которая выполняет вызов различных методов в зависимости от того, является ли ее аргумент числовым вектором или «фактором»:
> данные <- c ( "a" , "b" , "c" , "a" , NA ) > резюме ( данные ) Длина Класс Режим 5 символ символ > резюме ( as.factor ( данные )) abc NA's 2 1 1 1
Моделирование и черчение
Язык R имеет встроенную поддержку моделирования данных и графики. Следующий пример показывает, как R может генерировать и отображать линейную модель с остатками.
# Создать значения x и y x <- 1 : 6 y <- x ^ 2# Модель линейной регрессии y = A + B * x model <- lm ( y ~ x )# Отображение подробного обзора модели ( model )# Создать макет 2 на 2 для фигур par ( mfrow = c ( 2 , 2 ))# Выходные диагностические графики модельного графика ( модель )
Этот пример множества Мандельброта демонстрирует использование комплексных чисел . Он моделирует первые 20 итераций уравнения , где представляет различные комплексные константы.z = z2 + cc
Установите пакет, предоставляющий эту write.gif()функцию заранее:
install.packages ( "caTools" )
Исходный код:
библиотека ( caTools )jet.colors <- colorRampPalette ( c ( "зеленый" , "розовый" , "#007FFF" , "голубой" , " #7FFF7F" , "белый" , "#FF7F00" , "красный" , "#7F0000" ))dx <- 1500 # определить ширину dy <- 1400 # определить высотуC <- комплексное ( действительное = rep ( seq ( -2.2 , 1.0 , length.out = dx ), each = dy ), imag = rep ( seq ( -1.2 , 1.2 , length.out = dy ), times = dx ) )# преобразовать в матрицу комплексных чисел C <- matrix ( C , dy , dx )# инициализируем выходной 3D-массив X <- array ( 0 , c ( dy , dx , 20 ))Z <- 0# цикл с 20 итерациями for ( k in 1 : 20 ) {# центральное разностное уравнение Z <- Z ^ 2 + C# захват результатов X [, , k ] <- exp ( - abs ( Z )) }write.gif ( X , "Mandelbrot.gif" , col = jet.colors , delay = 100 )
Названия версий
Все выпуски версии R, начиная с 2.14.0, имеют кодовые названия , которые ссылаются на комиксы и фильмы Peanuts . [41] [42] [43]
В 2018 году основной разработчик R Питер Далгаард представил историю выпусков R с 1997 года. [44] Некоторые примечательные ранние выпуски до названных выпусков включают в себя:
Версия 1.0.0 выпущена 29 февраля 2000 года (2000-02-29), високосный день
Версия 2.0.0, выпущенная 4 октября 2004 года (2004-10-04), «которая, по крайней мере, звучала приятно» [44]
Идея именования релизов версий R была вдохновлена системой именования версий Debian и Ubuntu . Далгаард также отметил, что еще одна причина использования ссылок Peanuts для кодовых имен R заключается в том, что «все в статистике — P-орехи ». [44]
Wickham, Hadley; Çetinkaya-Rundel, Mine; Grolemund, Garrett (2023). R для науки о данных: импорт, очистка, преобразование, визуализация и моделирование данных (2-е изд.). Пекин Бостон Фарнем Севастополь Токио: O'Reilly . ISBN 978-1-4920-9740-2.
Гаголевский, Марек (2024). Глубокое программирование на языке R. doi :10.5281/ZENODO.7490464. ISBN 978-0-6455719-2-9.
^ Это выводит на стандартную ошибку список всех пакетов, от которых зависит tidyverse . Также могут отображаться предупреждения, показывающие конфликты пространств имен, которые обычно можно игнорировать.
Внешние ссылки
Технические документы R
Фонд свободного программного обеспечения
RЧасто задаваемые вопросы
Big Book of R, тщательно подобранный список книг по программированию на языке R
Книги, связанные с R - R Project, частично аннотированный список книг, связанных с S или R, которые могут быть полезны сообществу пользователей R
Ссылки
^ abc Morandat, Frances; Hill, Brandon; Osvald, Leo; Vitek, Jan (11 июня 2012 г.). «Оценка дизайна языка R: объекты и функции для анализа данных». Европейская конференция по объектно-ориентированному программированию . 2012 г .: 104–131. doi :10.1007/978-3-642-31057-7_6 . Получено 17 мая 2016 г. – через SpringerLink.
^ Питер Далгаард (14 июня 2024 г.). "R 4.4.1 выпущен" . Получено 15 июня 2024 г.
^ ab "R - Free Software Directory". directory.fsf.org . Получено 26 января 2024 г. .
^ "R-скрипты". mercury.webster.edu . Получено 17 июля 2021 г. .
^ "R Data Format Family (.rdata, .rda)". Loc.gov . 9 июня 2017 г. Получено 17 июля 2021 г.
^ ab Hornik, Kurt; R Core Team (12 апреля 2022 г.). "R FAQ". Комплексная сеть архивов R. 3.3 В чем разница между R и S?. Архивировано из оригинала 28 декабря 2022 г. . Получено 27 декабря 2022 г. .
^ "Введение". Руководство Джулии . Архивировано из оригинала 20 июня 2018 года . Получено 5 августа 2018 года .
^ "Сравнение с R". pandas Начало работы . Получено 15 июля 2024 г.
^ Джорджи, Федерико М.; Чераоло, Кармине; Меркателли, Даниэле (27 апреля 2022 г.). «Язык R: двигатель для биоинформатики и науки о данных». Life . 12 (5): 648. Bibcode :2022Life...12..648G. doi : 10.3390/life12050648 . PMC 9148156 . PMID 35629316.
^ Ихака, Росс. «Проект R: краткая история и мысли о будущем» (PDF) . стр. 12. Архивировано (PDF) из оригинала 28 декабря 2022 г. Получено 27 декабря 2022 г. Мы поставили перед собой цель разработать достаточно языка для преподавания вводных курсов статистики в Окленде.
^ Хорник, Курт; R Core Team (12 апреля 2022 г.). "R FAQ". Всеобъемлющая сеть архивов R. 2.13 Что такое R Foundation?. Архивировано из оригинала 28 декабря 2022 г. . Получено 28 декабря 2022 г. .
^ "Индекс /datasets". lib.stat.cmu.edu . Получено 5 сентября 2024 г. .
^ Ихака, Росс. «R: Past and Future History» (PDF) . стр. 4. Архивировано (PDF) из оригинала 28 декабря 2022 г. Получено 28 декабря 2022 г.
↑ Ihaka, Ross (5 декабря 1997 г.). «Новая версия R для Unix». stat.ethz.ch . Архивировано из оригинала 12 февраля 2023 г. . Получено 12 февраля 2023 г. .
^ Ихака, Росс. «Проект R: краткая история и мысли о будущем» (PDF) . стр. 18. Архивировано (PDF) из оригинала 28 декабря 2022 г. Получено 27 декабря 2022 г.
^ Уикхэм, Хэдли; Четинкая-Рандель, Майн; Гролемунд, Гарретт (2023). R для науки о данных, второе издание . O'Reilly . стр. xvii. ISBN978-1-492-09740-2.
^ "Quarto". Quarto . Получено 5 сентября 2024 г. .
^ Чемберс, Джон М. (2020). «S, R и наука о данных». The R Journal . 12 (1): 462–476. doi : 10.32614/RJ-2020-028 . ISSN 2073-4859. Язык R и связанное с ним программное обеспечение играют важную роль в вычислениях для науки о данных. ... Пакеты R предоставляют инструменты для широкого круга целей и пользователей.
^ Дэвис, Тилман М. (2016). «Установка R и дополнительных пакетов». Книга R: Первый курс программирования и статистики . Сан-Франциско, Калифорния: No Starch Press. стр. 739. ISBN9781593276515.
^ ab Hornik, Kurt (2012). «The Comprehensive R Archive Network». WIREs Computational Statistics . 4 (4): 394–398. doi :10.1002/wics.1212. ISSN 1939-5108. S2CID 62231320.
↑ Курт Хорник (23 апреля 1997 г.). «Объявляю: КРАН». р-помогите . Викиданные Q101068595..
^ "Статус зеркал CRAN". cran.r-project.org . Получено 16 октября 2024 г. .
^ "CRAN - Contributed Packages". cran.r-project.org . Получено 16 октября 2024 г. .
^ "R-Forge: Welcome". r-forge.r-project.org . Получено 5 сентября 2024 г. .
^ «Проект Омега для статистических вычислений». www.omegahat.net . Получено 5 сентября 2024 г. .
^ "Build software better, together". GitHub . Получено 5 сентября 2024 г. .
^ Уикхэм, Хэдли (2014). «Tidy Data» (PDF). Журнал статистического программного обеспечения . 59 (10). doi :10.18637/jss.v059.i10.
^ abc Wickham, Hadley; Cetinkaya-Rundel, Mine; Grolemund, Garrett (2023). R для науки о данных, второе издание . O'Reilly . ISBN978-1-492-09740-2.
^ "R для macOS". cran.r-project.org . Получено 5 сентября 2024 г. .
^ "IDE/редактор языка R | Tinn-R - Home" . Tinn-R (на бразильском португальском языке) . Проверено 5 сентября 2024 г.
^ Talbot, Justin; DeVito, Zachary; Hanrahan, Pat (1 января 2012 г.). «Riposte: трассировочный компилятор и параллельная виртуальная машина для векторного кода в R». Труды 21-й международной конференции по параллельным архитектурам и методам компиляции . ACM. стр. 43–52. doi :10.1145/2370816.2370825. ISBN9781450311823. S2CID 1989369.
^ Джексон, Джоаб (16 мая 2013 г.). TIBCO предлагает бесплатный R для предприятий. PC World . Получено 20 июля 2015 г.
^ «Взгляд в будущее R в Azure SQL и SQL Server». 30 июня 2021 г. Получено 7 ноября 2021 г.
^ "Введение в R. Заметки о R: среда программирования для анализа данных и графики" (PDF) . Получено 3 января 2021 г.
^ R Development Core Team. "Задания с оператором =" . Получено 11 сентября 2018 г.
^ Кабакофф, Роберт (2012). «Quick-R: Пользовательские функции». statmethods.net . Получено 28 сентября 2018 г. .
^ "R 3.4.4 выпущен". hypatia.math.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (19 февраля 1967 г.). «Peanuts by Charles Schulz for February 19, 1967 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 3.4.3 выпущен". hypatia.math.ethz.ch . Получено 7 апреля 2024 г. .
^ "R 3.4.2 выпущен". hypatia.math.ethz.ch . Получено 7 апреля 2024 г. .
^ ab Schulz, Charles (9 сентября 1965 г.). "Peanuts by Charles Schulz for September 09, 1965 | GoComics.com". GoComics . Получено 7 апреля 2024 г. .
^ "R 3.4.1 выпущен". hypatia.math.ethz.ch . Получено 7 апреля 2024 г. .
^ "R 3.4.0 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (29 июня 1966 г.). «Peanuts by Charles Schulz for June 29, 1966 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "[R] R 3.3.3 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (30 октября 1968 г.). «Peanuts by Charles Schulz for October 30, 1968 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "[R] R 3.3.2 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (15 июня 1967 г.). «Peanuts by Charles Schulz for June 15, 1967 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "[R] R 3.3.1 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (7 мая 1971 г.). «Peanuts by Charles Schulz for May 07, 1971 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "[R] R 3.3.0 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ ab Schulz, Charles (20 февраля 1964 г.). "Peanuts by Charles Schulz for February 20, 1964 | GoComics.com". GoComics . Получено 7 апреля 2024 г. .
^ "VERSION-NICK" . Получено 7 апреля 2024 г. .
^ "R 3.2.5 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ "R 3.2.4-revised is released". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ "R 3.2.4 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (18 декабря 1980 г.). «Peanuts by Charles Schulz for 18 December 1980 | GoComics.com». GoComics . Получено 9 апреля 2024 г. .
^ "R 3.2.3 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ MarketScreener (7 октября 2008 г.). "METLIFE: Освежите в памяти основы пожарной безопасности - 7 октября 2008 г. в 16:03 по восточноевропейскому времени | MarketScreener". www.marketscreener.com . Получено 7 апреля 2024 г.
^ «MetLife советует людям освежить знания по основам пожарной безопасности, чтобы оставаться в безопасности». Claims Journal . 12 октября 2005 г. Получено 7 апреля 2024 г.
^ "R 3.2.2 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (10 марта 1969 г.). «Peanuts by Charles Schulz for March 10, 1969 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "[R] R 3.2.1 liftoff". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (7 апреля 1966 г.). «Peanuts by Charles Schulz for April 07, 1966 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "[R] R 3.2.0 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ Шульц, Чарльз М. (2019). Счастье — это теплый щенок . Нью-Йорк: Penguin Workshop. ISBN978-1-5247-8995-4.
^ "R 3.1.3 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ "[R] R 3.1.2 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ https://i.etsystatic.com/12512391/r/il/23f45c/5091663835/il_680x540.5091663835_dqpa.jpg [ файл изображения с открытым URL ]
^ "Peanuts Springbok Puzzles".
^ "[R] R 3.1.1 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ "[R] R 3.1.0 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (11 января 1965 г.). «Peanuts by Charles Schulz for January 11, 1965 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 3.0.3 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (3 сентября 1971 г.). «Peanuts by Charles Schulz for September 03, 1971 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 3.0.2 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (22 ноября 1953 г.). «Peanuts by Charles Schulz for November 22, 1953 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 3.0.1 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (23 июня 1981 г.). «Peanuts by Charles Schulz for June 23, 1981 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 3.0.0 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (23 октября 1965 г.). «Peanuts by Charles Schulz for October 23, 1965 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 2.15.3 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (31 октября 1969 г.). «Peanuts by Charles Schulz for October 31, 1969 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 2.15.2 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (6 июня 1987 г.). «Peanuts by Charles Schulz for June 06, 1987 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 2.15.1 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (11 апреля 1971 г.). «Peanuts by Charles Schulz for April 11, 1971 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 2.15.0 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ Это пасхальный бигль, Чарли Браун! (ТВ-короткометражка 1974) - Цитаты - IMDb . Получено 8 апреля 2024 г. – через www.imdb.com.
^ "R 2.14.2 выпущен + R anniversary". stat.ethz.ch . Получено 7 апреля 2024 г. .
^ Макгоф, Нелла Бейли (20 января 2023 г.). «Наши любимые цитаты и высказывания из «Рождества Чарли Брауна»». Southern Living . Получено 8 апреля 2024 г.
^ "R 2.14.1 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (29 октября 1973 г.). «Peanuts by Charles Schulz for October 29, 1973 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .
^ "R 2.14.0 выпущен". stat.ethz.ch . Получено 7 апреля 2024 г. .
↑ Шульц, Чарльз (17 августа 1967 г.). «Peanuts by Charles Schulz for August 17, 1967 | GoComics.com». GoComics . Получено 7 апреля 2024 г. .