[컴] 언어 R 의 내멋대로 정리

language R /



어느정도 다른 언어를 알고 있는 상태에서 써놓은 글이다. ref. 6 에서 필요한 부분만 발췌? 한 것이다. 정리가 산만하고, 개인적인 필요에 의해 긁어 놓은 글이다.



help()

기본적으로 궁금한 function 에 대한 설명은 help() 로 알 수 있다. 간단하게 ? 로 대체할 수 있다.
help(data) # data 함수에 대한 설명을 보여준다.
help(Titanic) # data set Titanic 에 대한 설명을 보여준다.
?Titanic # help(Titanic) 과 같다.


apropos()

apropos(hehe) 라고 친다면, 메모리에 load 된 package 중에 hehe가 들어간 모든 function 을 찾아준다.


ls(pat='m')

memory 에 load 된 variable 의 이름들을 보여준다.
ls.str() 을 통해 더 자세한 정보를 알 수 있다.
pat 에는 regular expression 을 넣어서 해당하는 variable 만 볼 수 있다.


mode()

값의 type 을 볼 수 있다.
> mode(1)
[1] "numeric"

data()

R은 기본적은 data set 를 가지고 있다. 각 package 마다 sample data set 를 가지고 있다고 보면 된다. 이런 data 의 list 를 볼 수 있는 명령어가 data() 이다. [ref. 2]

보통 다른 언어에서 이렇게 sample data 를 가지고 있는 경우가 드물기는 한데, R 은 있다.
data(package="rpart") # rpart 라는 package 에 있는 data set 을 보여준다.
data(Titanic) # data set Titanic 을 load 한다. java 나 python 에서 class 나 function 을 import 하는 것과 비슷하다고 생가하면 된다.
data(HouseVotes84, package = "mlbench") # mlbench package 에 있는 data set HouseVotes84 를 load 한다.


Inf, -Inf

무한대를 나타낸다.


data 를 나타내는 object 들


  • vector : 1차원 array 라고 생각하면 된다. c# 이나 java 에서 vector 라 부르듯이.
  • factor: 어떤 범주에 있는 값들
  • array : 여러 차원이 가능한 table
  • matrix : 2차원의 array
  • ts : time series 를 나타낸다. 그래서 값과 함께 날짜, 빈도등의 시간을 나타내는 요소를 갖는다.
  • data frame : 
  • list : python 의 list 와 비슷하다.

data frame 과 list 만이 여러개의 type (R에서는 mode라 부른다.)을 한개의 object 에 할당할 수 있다.

dim(variable)

vector 처럼 1차원 array 는 length, mode 등으로 속성의 표현하기 부족함이 없다. 그런데 matrix 같은 녀석은 column 이 몇개인지, row 가 몇개인지 등을 표현할 필요가 있다. 그래서 dim 이 존재한다. dim 은 dimension 이라고 여기면 될 듯 하다.
dim(var) 하면 var 에 대한 dim 을 보여준다.
> df
  a b c
1 1 4 6
2 3 5 7
> dim(df)
[1] 2 3
 


dataframe

data table 을 저장할 때 사용한다. 그러니, 이녀석은 table 모양을 갖는 data set 이라고 보면 될 듯 하다.
> n = c(2, 3, 5) 
> s = c("aa", "bb", "cc") 
> b = c(TRUE, FALSE, TRUE) 
> df = data.frame(n, s, b)       # df is a data frame
  n  s     b
1 2 aa  TRUE
2 3 bb FALSE
3 5 cc  TRUE





Read files

getwd() / setwd() /


get working directory


read.table("data.txt")


rdata <- read.table("data.txt")
rdata$V1
rdata[, 1]

read.csv /read.csv2
read.delim / read.delim2

read.fwf("data.txt", widths=c(1,4, 5))


fixed width format 인 경우 사용할 수 있다.
A1.431,000 --> A / 1.43 / 1,000


scan("data.txt", what=list("", 0, 0) )


scan 은 읽어드리는 data 의 mode 도 정할 수 있다. what=list("", 0, 0)  인 경우에는 처음엔 character mode, 두번째, 세번째는 numeric mode 가 된다.
그리고 각각 다른 data object 를 만들어낸다. what=list("", 0, 0) 인 경우에 3개의 vector 를 가진 list 가 생성된다. 각각의 vector 는 character mode, numeric mode, numeric mode 가 되는 것이다.


write(data, file="data.txt")


data 를 data.txt 로 저장한다.

save.image() == save(list=ls(all=TRUE), file=".RData")


현재 작업환경을 저장할 수 있다. load(".RData") 를 통해 불러올 수 있다.




그 밖에...



> 1:10-1
[1] 0 1 2 3 4 5 6 7 8 9
> 1:(10-1)
[1] 1 2 3 4 5 6 7 8 9


> seq(1, 5, 0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

> rep(1, 30)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

> sequence(4:5)
[1] 1 2 3 4 1 2 3 4 5
> sequence(c(10,5))
[1]123456789 1012345

gl (generate levels)
> gl(3, 5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels:1 2 3
> gl(3, 5, length=30)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels:1 2 3
> gl(2, 6, label=c("Male", "Female"))
[1] MaleMaleMaleMaleMaleMale
[7] Female Female Female Female Female Female
Levels:Male Female

> expand.grid(h=c(60,80), w=c(100, 300), sex=c("Male", "Female"))
hwsex
1 60 100Male
2 80 100Male
3 60 300Male
4 80 300Male
5 60 100 Female
6 80 100 Female
7 60 300 Female
8 80 300 Female






law function
Gaussian (normal) rnorm(n, mean=0, sd=1)
exponential rexp(n, rate=1)
gamma rgamma(n, shape, scale=1)
Poisson rpois(n, lambda)
Weibull rweibull(n, shape, scale=1)
Cauchy rcauchy(n, location=0, scale=1)
beta rbeta(n, shape1, shape2)
‘Student’ (t) rt(n, df)
Fisher–Snedecor (F) rf(n, df1, df2)
Pearson (χ2) rchisq(n, df)
binomial rbinom(n, size, prob)
multinomial rmultinom(n, size, prob)
geometric rgeom(n, prob)
hypergeometric rhyper(nn, m, n, k)
logistic rlogis(n, location=0, scale=1)
lognormal rlnorm(n, meanlog=0, sdlog=1)
negative binomial rnbinom(n, size, prob)
uniform runif(n, min=0, max=1)
Wilcoxon’s statistics rwilcox(nn, m, n), rsignrank(nn, n)



> matrix(data=5, nr=2, nc=2)
[,1] [,2]
[1,]55
[2,]55
> matrix(1:6, 2, 3)
[,1] [,2] [,3]
[1,]135
[2,]246
> matrix(1:6, 2, 3, byrow=TRUE)
[,1] [,2] [,3]
[1,]123
[2,]456

> x <- 3; y <- 2.5; z <- 1
> exp1 <- expression(x / (y + exp(z)))
> exp1
expression(x/(y + exp(z)))
> eval(exp1)
[1] 0.5749019

casting
as.numeric ...


> x[, 3]
[1] 21 22

기본적으로 R에서 return 값은 lowest dimension 으로 표현된다.


기본함수들

함수 설명
sum(x) sum of the elements of x
prod(x) product of the elements of x
max(x) maximum of the elements of x
min(x) minimum of the elements of x
which.max(x) returns the index of the greatest element of x
which.min(x) returns the index of the smallest element of x
range(x) id. than c(min(x), max(x))
length(x) number of elements in x
mean(x) mean of the elements of x
median(x) median of the elements of x
var(x) or cov(x) variance of the elements of x (calculated on n − 1); if x is a matrix or a data frame, the variance-covariance matrix is calculated
cor(x) correlation matrix of x if it is a matrix or a data frame (1 if x is a vector)
var(x, y) or cov(x, y) covariance between x and y, or between the columns of x and those of y if they are matrices or data frames
cor(x, y) linear correlation between x and y, or correlation matrix if they are matrices or data frames
round(x, n) rounds the elements of x to n decimals
rev(x) reverses the elements of x
sort(x) sorts the elements of x in increasing order; to sort in decreasing order: rev(sort(x))
rank(x) ranks of the elements of x



함수 설명
log(x, base) computes the logarithm of x with base base
scale(x) if x is a matrix, centers and reduces the data; to center only use the option center=FALSE, to reduce only scale=FALSE (by default center=TRUE, scale=TRUE)
pmin(x,y,…) a vector which ith element is the minimum of x[i], y[i], …
pmax(x,y,…) id. for the maximum
cumsum(x) a vector which ith element is the sum from x[1] to x[i]
cumprod(x) id. for the product
cummin(x) id. for the minimum
cummax(x) id. for the maximum
match(x, y) returns a vector of the same length than x with the elements of x which are in y (NA otherwise)
which(x == a) returns a vector of the indices of x if the comparison operation is true (TRUE), in this example the values of i for which x[i] == a (the argument of this function must be a variable of mode logical)
choose(n, k) computes the combinations of k events among n repetitions = n!/[(n−k) / !k!]
na.omit(x) suppresses the observations with missing data (NA) (suppresses the corresponding line if x is a matrix or a data frame)
na.fail(x) returns an error message if x contains at least one NA
unique(x) if x is a vector or a data frame, returns a similar object but with the duplicate elements suppressed
table(x) returns a table with the numbers of the diff erents values of x (typically for integers or factors)
table(x, y) contingency table of x and y
subset(x, …) returns a selection of x with respect to criteria (…, typically com-
parisons: x$V1 < 10) ; if x is a data frame, the option select gives the variables to be kept (or dropped using a minus sign)
sample(x, size) resample randomly and without replacement size elements in the vector x, the option replace = TRUE allows to resample with replace-ment



matrix combination

rbind
cbind
> m1 <- matrix(1, nr = 2, nc = 2)
> m2 <- matrix(2, nr = 2, nc = 2)
> rbind(m1, m2)
[,1] [,2]
[1,]11
[2,]11
[3,]22
[4,]22

> data(InsectSprays)
> aov.spray <- aov(sqrt(count) ~ spray, data = InsectSprays)
==
> aov.spray <- aov(sqrt(InsectSprays$count) ~ InsectSprays$spray)

> aov.spray <- aov(sqrt(InsectSprays[, 1]) ~ InsectSprays[, 2])



~

~(물결, tilde) 은 통계학 공식(statistical formula)을 나타내 준다.  그래서 이것은 일반적인 수학공식(mathematical formula) 와는 다르다.
a + b 는 더하기를 뜻하는 것이 아니라, a column 과 b column 을 둘 다 변수로 포함한다는 이야기다.


myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
 "Species depends on Sepal Length, Sepal Width, Petal Length and Petal Width".


the formula y~x1+x2
=
y = β1x1+β2x2+α

y~I(x1+x2)
=
y = β(x1+ x2) + α.


y = β1x + β2x2+ α
=
y ~ poly(x, 2) (and not y ~ x + x^2).

https://cran.r-project.org/doc/manuals/R-intro.html#Formulae-for-statistical-models



predict(modelClass, ...)

predict 가 구현된 class 를 첫번째 인자로 넘기면 , 해당 class 의 predict 를 호출하게 된다. 그리고, 이 predict 에서 사용될 인자들을 ... 에 넣으면 된다.
model <- naiveBayes(Class ~ ., data = HouseVotes84)
predict(model, HouseVotes84[1:10,])



load

> library(class)
> library(e1071)

> pairs(iris[1:4], main = "Iris Data (red=setosa,green=versicolor,blue=virginica)",
      pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
> data(iris)
> summary(iris)
> classifier<-naiveBayes(iris[,1:4], iris[,5])
> table(predict(classifier, iris[,-5]), iris[,5])




naive Bayes 사용

naiveBayes {e1071} | inside-R | A Community Site for R



e1071 library 설치


CRAN - Mirrors List :
> install.packages('e1071', dependencies = TRUE, repos='https://cloud.r-project.org/')
> install.packages('caret', dependencies = TRUE, repos='https://cloud.r-project.org/')
> install.packages('tm', dependencies = TRUE, repos='https://cloud.r-project.org/')




S3 의 generic-function Object Oriented

S3, S4 의 OOP 에 대해서는 ref. 5 를 참고하자. S3 에서 OOP 는 C 함수에서 object method 의 override 를 구현한 것과 비슷하다고 보면 될 것 같다. 그러니까 class 의 instance 에서 바로 method 를 호출하는 것이 아니라, class 의 instance 를 parameter 로 넘겨서 어떤 instance 를 알려주는 것이다.
myclass.dodo("hello") --> dodo(myclass, "hello")



Reference

  1. Data Mining Algorithms In R/Classification/Naïve Bayes - Wikibooks, open books for an open world
  2. R FAQ: How can I see what data sets are available when I start R?
  3. r faq - Use of ~ (tilde) in R programming Language - Stack Overflow
  4. What does “S3 methods” mean in R?
  5. OO field guide · Advanced R.
  6. R for beginner, cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf




댓글 없음:

댓글 쓰기