Введение в R. Часть 2

А. М. Ярославцев

Введение в R. Ч2.

Data frames -Таблицы данных

 n = c(2, 3, 5)
 s = c("aa", "bb", "cc") 
 b = c(TRUE, FALSE, TRUE)
 
 df =data.frame(n, s, b) ; df
##   n  s     b
## 1 2 aa  TRUE
## 2 3 bb FALSE
## 3 5 cc  TRUE

Знак $ позволяет обращаться к переменной

 df$n
## [1] 2 3 5
 colnames(df)  #  выводит имена колонок
## [1] "n" "s" "b"
 rownames(df)  #  выводит имена строк (объектов)
## [1] "1" "2" "3"
 dim(df)       #  размерность таблицы: число строк и число столбцов 
## [1] 3 3
  summary(df) #выводит общую информацию для каждого столбца (вектора)
##        n          s         b          
##  Min.   :2.000   aa:1   Mode :logical  
##  1st Qu.:2.500   bb:1   FALSE:1        
##  Median :3.000   cc:1   TRUE :2        
##  Mean   :3.333                         
##  3rd Qu.:4.000                         
##  Max.   :5.000

##Данные, загруженные по умолчанию

посмотреть можно командой data()

Ирисы Фишера (Андерсона)

 dim(iris)       #  число строк и число столбцов
## [1] 150   5
 summary(iris)  #выводит общую информацию
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

Выбор строк, столбцов, ячеек

iris [ строки, столбцы ]

iris[1:4,] # cтроки с 1 по 4, все столбцы
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
iris[4,2]  # для объекта 4 выводится свойства из 2 столбца
## [1] 3.1

Создание подвыборок из таблиц данных

iris[iris$Species==c("setosa","virginica"),]
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 1            5.1         3.5          1.4         0.2    setosa
## 3            4.7         3.2          1.3         0.2    setosa
## 5            5.0         3.6          1.4         0.2    setosa
## 7            4.6         3.4          1.4         0.3    setosa
## 9            4.4         2.9          1.4         0.2    setosa
## 11           5.4         3.7          1.5         0.2    setosa
## 13           4.8         3.0          1.4         0.1    setosa
## 15           5.8         4.0          1.2         0.2    setosa
## 17           5.4         3.9          1.3         0.4    setosa
## 19           5.7         3.8          1.7         0.3    setosa
## 21           5.4         3.4          1.7         0.2    setosa
## 23           4.6         3.6          1.0         0.2    setosa
## 25           4.8         3.4          1.9         0.2    setosa
## 27           5.0         3.4          1.6         0.4    setosa
## 29           5.2         3.4          1.4         0.2    setosa
## 31           4.8         3.1          1.6         0.2    setosa
## 33           5.2         4.1          1.5         0.1    setosa
## 35           4.9         3.1          1.5         0.2    setosa
## 37           5.5         3.5          1.3         0.2    setosa
## 39           4.4         3.0          1.3         0.2    setosa
## 41           5.0         3.5          1.3         0.3    setosa
## 43           4.4         3.2          1.3         0.2    setosa
## 45           5.1         3.8          1.9         0.4    setosa
## 47           5.1         3.8          1.6         0.2    setosa
## 49           5.3         3.7          1.5         0.2    setosa
## 102          5.8         2.7          5.1         1.9 virginica
## 104          6.3         2.9          5.6         1.8 virginica
## 106          7.6         3.0          6.6         2.1 virginica
## 108          7.3         2.9          6.3         1.8 virginica
## 110          7.2         3.6          6.1         2.5 virginica
## 112          6.4         2.7          5.3         1.9 virginica
## 114          5.7         2.5          5.0         2.0 virginica
## 116          6.4         3.2          5.3         2.3 virginica
## 118          7.7         3.8          6.7         2.2 virginica
## 120          6.0         2.2          5.0         1.5 virginica
## 122          5.6         2.8          4.9         2.0 virginica
## 124          6.3         2.7          4.9         1.8 virginica
## 126          7.2         3.2          6.0         1.8 virginica
## 128          6.1         3.0          4.9         1.8 virginica
## 130          7.2         3.0          5.8         1.6 virginica
## 132          7.9         3.8          6.4         2.0 virginica
## 134          6.3         2.8          5.1         1.5 virginica
## 136          7.7         3.0          6.1         2.3 virginica
## 138          6.4         3.1          5.5         1.8 virginica
## 140          6.9         3.1          5.4         2.1 virginica
## 142          6.9         3.1          5.1         2.3 virginica
## 144          6.8         3.2          5.9         2.3 virginica
## 146          6.7         3.0          5.2         2.3 virginica
## 148          6.5         3.0          5.2         2.0 virginica
## 150          5.9         3.0          5.1         1.8 virginica

Для двух видов ирисов а ириса: ирис щетинистый (Iris setosa) и ирис виргинский (Iris virginica); вывести данные по длине внутренней доли околоцветника (petal length) и название вида

iris[iris$Species=="setosa" | iris$Species=="virginica",c("Petal.Length","Species")]
##     Petal.Length   Species
## 1            1.4    setosa
## 2            1.4    setosa
## 3            1.3    setosa
## 4            1.5    setosa
## 5            1.4    setosa
## 6            1.7    setosa
## 7            1.4    setosa
## 8            1.5    setosa
## 9            1.4    setosa
## 10           1.5    setosa
## 11           1.5    setosa
## 12           1.6    setosa
## 13           1.4    setosa
## 14           1.1    setosa
## 15           1.2    setosa
## 16           1.5    setosa
## 17           1.3    setosa
## 18           1.4    setosa
## 19           1.7    setosa
## 20           1.5    setosa
## 21           1.7    setosa
## 22           1.5    setosa
## 23           1.0    setosa
## 24           1.7    setosa
## 25           1.9    setosa
## 26           1.6    setosa
## 27           1.6    setosa
## 28           1.5    setosa
## 29           1.4    setosa
## 30           1.6    setosa
## 31           1.6    setosa
## 32           1.5    setosa
## 33           1.5    setosa
## 34           1.4    setosa
## 35           1.5    setosa
## 36           1.2    setosa
## 37           1.3    setosa
## 38           1.4    setosa
## 39           1.3    setosa
## 40           1.5    setosa
## 41           1.3    setosa
## 42           1.3    setosa
## 43           1.3    setosa
## 44           1.6    setosa
## 45           1.9    setosa
## 46           1.4    setosa
## 47           1.6    setosa
## 48           1.4    setosa
## 49           1.5    setosa
## 50           1.4    setosa
## 101          6.0 virginica
## 102          5.1 virginica
## 103          5.9 virginica
## 104          5.6 virginica
## 105          5.8 virginica
## 106          6.6 virginica
## 107          4.5 virginica
## 108          6.3 virginica
## 109          5.8 virginica
## 110          6.1 virginica
## 111          5.1 virginica
## 112          5.3 virginica
## 113          5.5 virginica
## 114          5.0 virginica
## 115          5.1 virginica
## 116          5.3 virginica
## 117          5.5 virginica
## 118          6.7 virginica
## 119          6.9 virginica
## 120          5.0 virginica
## 121          5.7 virginica
## 122          4.9 virginica
## 123          6.7 virginica
## 124          4.9 virginica
## 125          5.7 virginica
## 126          6.0 virginica
## 127          4.8 virginica
## 128          4.9 virginica
## 129          5.6 virginica
## 130          5.8 virginica
## 131          6.1 virginica
## 132          6.4 virginica
## 133          5.6 virginica
## 134          5.1 virginica
## 135          5.6 virginica
## 136          6.1 virginica
## 137          5.6 virginica
## 138          5.5 virginica
## 139          4.8 virginica
## 140          5.4 virginica
## 141          5.6 virginica
## 142          5.1 virginica
## 143          5.1 virginica
## 144          5.9 virginica
## 145          5.7 virginica
## 146          5.2 virginica
## 147          5.0 virginica
## 148          5.2 virginica
## 149          5.4 virginica
## 150          5.1 virginica

Основые типы данных

Тип Функция Паряметры
Вектор c() [i] - место или условие
Фактор factor() [] - место или условие
Матрица matrix() [строки,столбцы]; [i] - по месту или условию
Список list() [[i]], $
Таблица data.frame() [,] $

Контрольное задание - Создание подвыборок

Найти виды у которых Petal.Length>2, но <6, вывести виды и количество случаев попадения в условие

Ответ - Создание подвыборок

summary(factor(iris[(iris$Petal.Length>2 & iris$Petal.Length<6),"Species" ]))
## versicolor  virginica 
##         50         39

Создание функций - Functioning

создадим функцию my_func, которая возводит числа в квадрат и в куб

my_func = function(p)   # у функции 1 параметр p
  {                     # открывается тело функции
    x=p^2
    y=x^3
    print("result")     # вывод слова "result"
    return(c(x,y))      # выходные параметры функции
  }                     # закрывается тело функции
my_func(2)              # вызов функции
## [1] "result"
## [1]  4 64

Построить функцию, которая находит сумму чисел, логарифм суммы и экспоненту суммы

mathses = function(p,q)
  {
    result = c(p+q,log(p+q,10),exp(p+q))
    names(result) = c("summ", "log","exp")
    return(result)
  }
mathses(2,3)
##      summ       log       exp 
##   5.00000   0.69897 148.41316

Проверка условий с помощью функции if

mf = function(p)
  {   if (p>0)
      {
        x=log(p)
        return(x)
      }
    else
      {
        return(NULL)      
      }
  }
mf(-1) ; mf(12)
## NULL
## [1] 2.484907

Контрольное задание - Проверка условий

Функция sqrt(p) извлекает квадратный корень. Написать функцию, которая проверяет аргумент: если он больше нуля, то извлекается корень, если меньше - то пишется слово “NULL”

##Ответ - Проверка условий

myroot = function(p) 
  {
    if (p>=0 )
      {return(sqrt(p))}
    else
      {return(NULL)}
  }
  
  myroot(9) ;  myroot(0.1) ;  myroot(-5)
## [1] 3
## [1] 0.3162278
## NULL
  mydistribution = function(x,p)
    {
      if ( x>=0 & x%%1==0 & p<=1 & p>0 )
        {
          return(p*(1-p)^x)        
        }
      else
        {
          return(0)
        }
      
    }
mydistribution(3,.4)
## [1] 0.0864