Главная страница

01 Пр Основные операторы R. Занятие 01. Введение в r содержание установка пакета 1


Скачать 1.34 Mb.
НазваниеЗанятие 01. Введение в r содержание установка пакета 1
Дата28.02.2022
Размер1.34 Mb.
Формат файлаdocx
Имя файла01 Пр Основные операторы R.docx
ТипЗанятие
#377197
страница8 из 10
1   2   3   4   5   6   7   8   9   10

Матрицы и массивы чисел в 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)

  1. Вывод данных в 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
1   2   3   4   5   6   7   8   9   10


написать администратору сайта