#вызов справки
?vector()
#все простые объекты являются векторами
a<-1
a.string<-'1'
#векторы задаются через команду c()
b<-c(1,2,3,4)
b.str <- c('a', 'A', 'b', a)
a
#результат есть строковое значение, не число
a.string
#является ли а числовым объектом
is.numeric(a)
#является ли а.string числовым объектом
is.numeric(a.string)
#является ли b числовым объектом
is.numeric(b)
#является ли b.str числовым объектом
is.numeric(b.str)
#является ли a.string символьным\строковым объектом
is.character(a)
#является ли a.string символьным\строковым объектом
is.character(a.string)
#является ли b символьным\строковым объектом
is.character(b)
#является ли b.str символьным\строковым объектом
is.character(b.str)
#ВАЖНО! объединение в вектор строковых и числовых объектов переведет все объекты к строковому типу
#конвертировать строку в число, если это возможно
b.num <- as.numeric(a.string)
b.num
is.numeric(b.num)
#операции производимые с веторами обычно проводятся поэлементно
#вновь инициализируем вектор
b<-c(1,2,3,4)
b-1
#возведение в квадрат
b^2
#есть встроенные функции, обрабатывающие вектор целиком
#cумма
sum(b)
#среднее
mean(b)
#стандартное отклонение
sd(b)
#добавить элемент к вектору
#исходный вид b
b
#добавим элемент в конец b
e<-c(b,5)
e
#добавим элемент в начало b
d<-c(10,b)
d
#выбрать элемент из вектора
#инициализируем b
b<-c(10,20,30,40)
#выберем первый элемент из b
b[1]
#выберем последений элемент из b указав длину b, полученную с помощью функции length()
b[length(b)]
#выберем несколько значений из вектора (последнее значение включено в выбор!)
b[1:3]
#обратимся к элементу, не присутсвующему в b
b[5]
#удалим элемент из b
b[-3]
#инициализируем матрицу с 5 колонками и 3 строками, заполненными значением 10
a.mat<-matrix(10, ncol=5, nrow=3)
a.mat
#если не задавать значение при инициализации матрицы
b.mat<-matrix(ncol=5, nrow=3)
b.mat
#обращение к элементам матрицы.
#заменим значение в 1й строке 3м столбец на -5
a.mat[1,3]<- -5
a.mat
#сейчас матрица состоит из числовых значений
is.numeric(a.mat)
is.numeric(a.mat[1,1])
#заменим значение в 2й строке 2м столбец на строковый объект
a.mat[2,2]<-'some_string'
a.mat
#заметим,что теперь все элементы матрицы стали строковыми
is.numeric(a.mat)
is.numeric(a.mat[1,1])
#инициализируем матрицу
a.mat<-matrix(5, ncol=3, nrow=2)
a.mat
#добавим 2 столбца к матрице
a.mat<-cbind(a.mat, c(2,3), c(3,7))
a.mat
#добавим строку к матрице
a.mat<-rbind(a.mat, c(2,8,3,10,12))
a.mat
#работа с dataframe
#dataframe похож на матрицы, но может содержать значения строковых типов без преобразования для остальных значений столбцов таблицы
#конфертируем матрицу в data frame
a.df<-as.data.frame(a.mat)
#добавим строковое значениею. Индексация по положению индентична индексации в матрицах
a.df[2,3]<-'some_string'
a.df
#можем манипулировать со значениями
a.df[1,1] + a.df[2,2]
#3й столбец стал строковым
is.character(a.df[,3])
is.numeric(a.df[,3])
#остальные столбцы остались числовыми
is.numeric(a.df[,1])
is.numeric(a.df[,2])
is.numeric(a.df[,4])
is.numeric(a.df[,5])
#зададим имена столбцов df
colnames(a.df)<-c('first_col','2_col','third_col','4_col','last_col')
a.df
#можем обращаться по имени
a.df[3, '2_col']
a.mat
#ускоренное применение функций вдоль размерностей (строк, столбцов) с помощью Си-ускоренной функции apply
#среднее по столбцам
a.mat.col.mean<-apply(a.mat, 1, mean)
a.mat.col.mean
#среднее по строкам
a.mat.row.mean<-apply(a.mat, 2, mean)
a.mat.row.mean
#напишем свою функцию:
my_mean_func<-function(a){
my.sum<-sum(a)
my.mean<-my.sum/length(a)
return(my.mean)
}
#инициализируем некий вектор
my.vector<-c(10,10,20,20)
#подставим в функцию
my_mean_func(my.vector)
#инициализируем матрицу
new.matrix<-matrix(ncol=4, nrow=3)
new.matrix
#добавим элементы в матрицу с помощью веторов сгенерированных функцией rep() - возвращает вектор заданной длины заполненный одним значением
new.matrix[1,]<-rep(10, ncol(new.matrix))
new.matrix[2,]<-rep(20, ncol(new.matrix))
new.matrix[3,]<-rep(30, ncol(new.matrix))
#посмотрим что получилось
new.matrix
#применим функцию к каждой строке матрицы с помощью цикла
for (i in 1:nrow(new.matrix)){
mean.of.row<-my_mean_func(new.matrix[i,])
print(mean.of.row)
}
#применим функцию к каждой строке матрицы с помощью цикла
#добавим условный оператор, на выполнение цикла
for (i in 1:nrow(new.matrix)){
mean.of.row<-my_mean_func(new.matrix[i,])
if(mean.of.row<=20){print(mean.of.row)}
else{print('mean value >20')}
}
#действия над Not Avaible (NA) вегда дают NA
bad.vector<-c(1,5,NA)
bad.vector
mean(bad.vector)
bad.vector[3]+1
#является ли элемент NA
is.na(bad.vector[3])
#отбрасывание NA элементов
good.vector<-na.omit(bad.vector)
good.vector
#добавление числового значения в текст:
a.string <-'There are 40 students in class and only 39.5 chairs'
b.string <-paste0('There are ', 40, ' students in class and only ', 39.5, ' chairs')
c.value<-40
d.value<-39.5
c.string <-paste0('There are ', c.value, ' students in class and only ', d.value, ' chairs')
e.string<-sprintf('There are %2$i students in class and only %1$.2f chairs', d.value, c.value)
#цифра между сиволами %..$ указывает на порядковый номер аргумента
#i - целочисленный формат
#f - дробный формат, число знаков после запятой указывается после символа $
#посмотрим, что получилось
a.string
b.string
c.string
e.string
#установка библиотеки kohonen из US зеркала
install.packages("kohonen", repos='http://cran.us.r-project.org')
#список доступных зеркал здесь: https://cran.r-project.org/mirrors.html
#подключение библиотеки kohonen
library(kohonen)
#выбор массива данных встроенного в библиотеку
data(wines, package = "kohonen")
#обучение карты кохонена с 20 нейронами
wines.som <- som(X=wines, somgrid(5, 4, "hexagonal"))
#просмотр структуры объекта wines.som
str(wines.som)
#доступ к структурам объекта
wines.som$codes
#использование встроенных методов визуализации
plot(wines.som, type = "codes")
plot(wines.som, type = "dist.neighb")
#сохранение модели в текущую дерикторию
save(wines.som, file = "my_som_model.rda")
#уничтожим модель
wines.som<-NA
wines.som$codes
#загрузим модель с диска
load("my_som_model.rda")
#проверим, загружена ли модель
wines.som$codes
#сохраним таблицу в виде .csv файла на диск
write.csv(wines, 'my_wines.csv', row.names=FALSE)
#загрузим таблицу в виде dataframe с диска
loaded.wines <- read.csv('my_wines.csv')
is.data.frame(loaded.wines)
#посомтрим на загруженный dataframe
loaded.wines
#получим краткую сводку по dataframe
summary(loaded.wines)