어느정도 다른 언어를 알고 있는 상태에서 써놓은 글이다. 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
rbindcbind
> 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 Re1071 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
- Data Mining Algorithms In R/Classification/Naïve Bayes - Wikibooks, open books for an open world
- R FAQ: How can I see what data sets are available when I start R?
- r faq - Use of ~ (tilde) in R programming Language - Stack Overflow
- What does “S3 methods” mean in R?
- OO field guide · Advanced R.
- R for beginner, cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf
댓글 없음:
댓글 쓰기