01 Пр Основные операторы R. Занятие 01. Введение в r содержание установка пакета 1
Скачать 1.34 Mb.
|
Матрицы и массивы чисел в RПеременным в R можно присваивать не только отдельно взятые числа, но и массивы чисел. Самым простым примером может служить набор целых чисел от 0 до 10. Мы можем весь этот набор сохранить в массиве командой m <- 0:10 # Массив чисел 0,1,2,…,10 m # Вывести на экран содержимое m Если теперь отправить этот код на компиляцию (Ctrl +Enter), то получим под именем «m» целый набор чисел. В случае, когда мы хотим обратиться к конкретному элементу этого массива, нам необходимо использовать оператор квадратных скобок [..]. Например, чтобы узнать 6-ое значение в массиве «m» надо написать: m [6] # 6-ой элемент массива m а выражение m [2:7] # подмассив значений m с номерами от 2 до 7 образует подмножество значений массива m с номерами 2,3,..,7, т.е. фактически новый массив m[2],m[3],…,m[7]: Массивы – это объекты данных R, которые могут хранить данные в более чем двух измерениях. Например, если мы создадим массив измерений (2, 3, 4), он создаст 4 прямоугольные матрицы, каждая из которых содержит 2 строки и 3 столбца. Массивы могут хранить только один тип данных. Массив создается с помощью функции array () . Он принимает векторы в качестве входных данных и использует значения в параметре dim для создания массива. Пример В следующем примере создается массив из двух матриц 3×3, каждая из которых содержит 3 строки и 3 столбца. # Создайте два вектора разной длины vector1 <- c(5,9,3) vector2 <- c(10,11,12,13,14,15) # Возьмите эти векторы как входные данные для массива result <- array(c(vector1,vector2),dim = c(3,3,2)) print(result) Вывод данных в RВ R для вывода сообщения на экран есть две функции: print() и cat(). print(8) ## [1] 8 print("hello") ## [1] "hello" Или так: x <- 5 print(x) ## [1] 5 Как можно заметить, когда с помощью print() на экран выводится текст, он печатается в кавычках. При желании это можно изменить, добавив аргумент quote=FALSE: print("hello", quote=FALSE) ## [1] hello А что делает cat()? Тоже выводит сообщение на экран, только сразу без кавычек: cat("hello") ## hello Видно, что cat() при печати к тому же не выводит номер строки. Но это все мелочи. В чем состоит принципиальное отличие print() от cat()? Во-первых, cat(), в отличие от print(), умеет «склеивать» то, что мы подаем ему на вход. Сравним: print(1,8) # выводится только первый элемент ## [1] 1 cat(1,8) # выводятся все элементы ## 1 8 Во-вторых, cat() умеет работать только с одномерными объектами (числа, строки, вектора), а print() может вывести на экран что угодно. Рассмотрим пример с векторами, где обе функции сработают: v <- c(3, 6, 9) print(v) # ок ## [1] 3 6 9 cat(v) # oк ## 3 6 9 А теперь рассмотрим пример с матрицами, где print() сработает, а cat() выведет все элементы матрицы в одну строчку: m <- matrix(3, nrow = 2, ncol = 3) print(m) # сохранил матрицу ## [,1] [,2] [,3] ## [1,] 3 3 3 ## [2,] 3 3 3 cat(m) # склеил все элементы в одну строку ## 3 3 3 3 3 3 И, наконец, пример со списками, когда print() сработает, а cat() — нет: L <- list(c(1, 2, 3), c(0, 1)) print(L) ## [[1]] ## [1] 1 2 3 ## ## [[2]] ## [1] 0 1 cat(L) # ошибка В-третьих, cat() просто выводит объект на экран, не сохраняя информацию о нем, а print() сохраняет сам объект. Другими словами, функция cat() просто выводит информацию на экран, ничего не возращая, то есть возвращая пустой объект типа NULL, а функция print() выводит объект на экран и возвращает сам объект: a <- cat(9) ## 9 a ## NULL class(a) ## [1] "NULL" b <- print(9) ## [1] 9 b ## [1] 9 class(b) ## [1] "numeric" В функции cat() можно настраивать вид вывода, например, указывать разделитель между элементами в выдаче, выставив аргумент sep: cat("Hello", ",", "world", sep = "") # пустота ## Hello,world cat(24, 1, 2020, sep = "-") # дефис ## 24-1-2020 Как быть, если мы хотим вывести некоторый текст и значение переменной? Для этого можем использовать cat(), потому что он умеет «склеивать» записи: name <- "Alla" cat("Hello, ", name) ## Hello, Alla А если мы хотим, чтобы переменная была где-то внутри текста? Для этого есть функция sprintf(): cat(sprintf("Hello, %s!", name)) # s - string ## Hello, Alla! В то место, куда мы хотим добавить значение переменной, мы вписываем знак % и сокращенное название типа это переменной: s для строк (string), i для целочисленных (integer), f для чисел с плавающей точкой (float). cat(sprintf("Age: %i", 25)) # i - integer ## Age: 25 cat(sprintf("Age: %f", 25.5)) # f - float ## Age: 25.500000 У чисел с плавающей точкой можно контролировать число знаков после запятой: cat(sprintf("Age: %f", 25.5)) # поумолчанию 6 знаков ## Age: 25.500000 cat(sprintf("Age: %.3f", 25.5)) # 3 знака ## Age: 25.500 |