美文网首页
R语言之入门必读

R语言之入门必读

作者: Oodelay | 来源:发表于2019-03-18 21:34 被阅读0次

采编自DataMiningWithR

R.version #查看R的版本信息

开启R的旅程 Starting with R

install.packages('DMwR') #下载工具包
remove.packages('C50') #删除工具包

library('DMwR') #加载工具包
require('DMwR')#同上

#同时加载多个工具包
lb = c('ggplot2','VIM','dplyr','pROC')
lapply(lb,require,character.only = T)

# 若加载失败则下载,避免重复下载
if(!require('DMwR'))(
 install.packages('DMwR') 
)

installed.packages() #查看所有已下载的工具包的详细信息

(.packages())#查询当前工作环境下加载的工具包

old.packages() #查看哪些工具包需要更新

update.packages() #更新工具包

setwd("D:/R-progress/Chapter 1") #设定工作路径

getwd() #获取当前工作路径

sessionInfo() #获取当前环境的配置信息

?? knnImputation()  # 查看帮助

操作对象 Objects

x <- 945;x

y <- 39;y
y <- 43;y

z <- 5
w <- z^2;w
w <- z%/%2;w #除法取整
w <- z%%2;w #除法取余
i <- (z*2 + 45)/6;i
ceiling(i);floor(i);round(i,digits = 3)

(34 + 90)/12.5

ls() #获取当前环境下的环境变量
rm(y) #删除环境变量y
rm(z,w,i)#删除多个环境变量
rm(list = ls()) #删除所有环境变量

向量 vectors

v <- c(4,7,23.5,76.2,80);v
length(v)
class(v);mode(v) #变量类型

v <- c(4,7,23.5,76.2,80,"rrt");v
class(v)

u <- c(4,6,NA,2);u;mode(u)
k <- c(T,F,NA,TRUE);k;mode(k)

v;v[2]
v[1] <- 'hello';v

x <- vector();x
x[3] <- 45;x

length(x)
x[10];x
x[5] <- 4;x

v <- c(45,243,78,343,445,44,56,77);v
v <- c(v[5],v[7]);v

x <- sqrt(v);x #获取向量中每个元素的算术平方根
y <- x^(1/4);y #获取向量中每个元素的1/4次方

v1 <- c(4,6,87)
v2 <- c(34,32.4,12)
v1+v2

v1 <- c(4,6,8,24)
v2 <- c(10,2)
v1+v2

v1 <- c(4,6,8,24)
2*v1

因子 Factors

g <- c('f','m','m','m','f','m','f','m','f','f');g;class(g)

g <- factor(g);g 

other.g <- factor(c('m','m','m','m','m'),levels=c('f','m'));other.g

table(g)
table(other.g)

a <- factor(c('adult','adult','juvenile','juvenile','adult','adult',
               'adult','juvenile','adult','juvenile'))

t <- table(a,g);t
margin.table(t,1)
margin.table(t,2)

prop.table(t,1)
prop.table(t,2)
prop.table(t)

生成序列Generating sequences

x <- 1:1000
10:15-1
10:(15-1)
5:0

seq(-4,1,0.5) 
# [1] -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5  0.0  0.5  1.0
seq(from=1,to=5,length=4) 
# [1] 1.000000 2.333333 3.666667 5.000000
seq(from=1,to=5,length=2)
# [1] 1 5
seq(from=-2,by=.2,length=10) 
# [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2

rep(5,10)
rep('hi',3)
rep(1:2,3)
# [1] 1 2 1 2 1 2
rep(1:2,each=3)
# [1] 1 1 1 2 2 2

gl(3,5)
 # [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
gl(2,5,labels=c('female','male'))
#  [1] female female female female female male   male   male   male   male  
# Levels: female male

rnorm(10) 

rnorm(100) %>% shapiro.test() #生成100个均值为0方差为1的随机数并判断是否符合正态分布,此函数生成的随机数较少时,有可能不符合正态分布

rnorm(4,mean=10,sd=3)

标签 Indexing

x <- c(0,-3,4,-1,45,90,-5)
x > 0 #对向量中的每个元素进行判断
# [1] FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE

# 获取符合筛选条件的元素
x[x>0]
x[x <= -2 | x > 5]
x[x > 40 & x < 100]

#根据元素在向量中的位置提取相应的元素
x[c(4,6)]
x[1:3]
y <- c(1,4)
x[y]

#根据元素在向量中的位置删除相应的元素
x[-1] 
x[-c(4,6)]
x[-(1:3)]

pH <- c(4.5,7,7.3,8.2,6.3);pH
names(pH) <- c('area1','area2','mud','dam','middle');pH

pH <- c(area1=4.5,area2=7,mud=7.3,dam=8.2,middle=6.3);pH

#根据名称提取相应的元素
pH['mud']
pH[c('area1','dam')]
pH[!(names(pH) %in% c('area1','dam'))] # '%in%'表示判断前者元素是否在后者范围中,返回'TRUE'和'FALSE','!'表示否定,即反义,与'%in%'合用表示不在其中的元素

矩阵和数组 Matrices and Arrays

m <- c(45,23,66,77,33,44,56,12,78,23);m
dim(m) <- c(2,5);m

m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5);m

m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5,byrow=T);m

m[2,3]

m[1,-c(3,5)]

m[1,]
m[,4]


m[1,,drop=F]
m[,4,drop=F]

m1 <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5);m1
cbind(c(4,76),m1[,4])
m2 <- matrix(rep(10,20),4,5);m2
m3 <- rbind(m1[1,],m2[3,]);m3

results <- matrix(c(10,30,40,50,43,56,21,30),2,4,byrow=T);results
colnames(results) <- c('1qrt','2qrt','3qrt','4qrt')
rownames(results) <- c('store1','store2')
results
results['store1',]
results['store2',c('1qrt','4qrt')]

a <- array(1:24,dim=c(4,3,2));a


a[1,3,2]
a[1,,2]
a[4,3,]
a[c(2,3),,-2]

m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5);m
m*3
m1 <- matrix(c(45,23,66,77,33,44),2,3);m1
m2 <- matrix(c(12,65,32,7,4,78),2,3);m2
m1+m2
m1*m2

列表 Lists

my.lst <- list(stud.id=34453,
               stud.name="John", 
               stud.marks=c(14.3,12,15,19));my.lst

# 双中括号表示提取对应的元素
my.lst[[1]]
my.lst[[3]]

#单中括号表示包含元素的名称
my.lst[1]

mode(my.lst[1])
mode(my.lst[[1]])

my.lst$stud.id #同my.lst[,'stud.id']

names(my.lst)
names(my.lst) <- c('id','name','marks') #重命名
my.lst

# 可添加新的变量,$后为变量的名称,c()为变量的内容
my.lst$parents.names <- c("Ana","Mike")
my.lst

length(my.lst)

my.lst <- my.lst[-5];my.lst

other <- list(age=19,sex='male')
lst <- c(my.lst,other);lst #合并两个list

unlist(my.lst) %>% mode() #破坏列表结构,成为向量

数据框 Data Frames

my.dataset <- data.frame(site=c('A','B','A','A','B'),
 season=c('Winter','Summer','Summer','Spring','Fall'),
 pH = c(7.4,6.3,8.6,7.2,8.9));my.dataset

my.dataset[3,2]

my.dataset$pH

# 设定一定的条件,提取数据子集
my.dataset[my.dataset$pH > 7,]
my.dataset[my.dataset$site == 'A','pH']
my.dataset[my.dataset$season == 'Summer',c('site','pH')]

subset(my.dataset,pH > 8)
subset(my.dataset,season == 'Summer',season:pH)

my.dataset[my.dataset$season == 'Summer','pH'] <- 
     my.dataset[my.dataset$season == 'Summer','pH'] + 1

my.dataset

my.dataset$NO3 <- c(234.5,256.6,654.1,356.7,776.4);my.dataset

nrow(my.dataset)
ncol(my.dataset)


names(my.dataset)
names(my.dataset) <- c("area","season","pH","NO3" )
my.dataset


names(my.dataset)[4] <- "PO4"
my.dataset

构造简单函数 Creating New Functions

# 基本就是这么个模式
myfunction <- function(arg1,arg2,...){
    statements
    return(object)
}


# 例 1
se <- function(x) { #   function()为定义的输入参数,包括对象
   v <- var(x) #求方差
   n <- length(x) #求元素的个数
   return(sqrt(v/n)) #返回方差除以元素个数的算术平方根,即标准误差
}

se(c(45,2,3,5,76,2,4))

# 例 2
basic.stats <- function(x,more=F) { # 'mode = F' 为判断语句,若为'mode = T',则执行某项操作
   stats <- list() #构建空列表
 
   clean.x <- x[!is.na(x)] #删除缺失值
 
   stats$n <- length(x) #统计元素个数,并作为变量n添加至空列表中
   stats$nNAs <- stats$n-length(clean.x) #获取缺失值的个数,添加到列表中
 
   stats$mean <- mean(clean.x) #获取真实值的均值
   stats$std <- sd(clean.x) #获取真实值的标准偏差
   stats$med <- median(clean.x) #获取真实值的中值
   if (more) { #若为'mode = T',则执行下列操作
     stats$skew <- sum(((clean.x-stats$mean)/stats$std)^3)/length(clean.x)
     stats$kurt <- sum(((clean.x-stats$mean)/stats$std)^4)/length(clean.x) - 3
   }
   unlist(stats)
}

basic.stats(c(45,2,4,46,43,65,NA,6,-213,-3,-45))
basic.stats(c(45,2,4,46,43,65,NA,6,-213,-3,-45),more=T)

# 例 3
# 让我们重温下小学数学知识
f <- function(x) {
  for(i in 1:10) {
    res <- x*i
    cat(x,'*',i,'=',res,'\n')
  }
}

f(10)

# 3 * 1 = 3 
# 3 * 2 = 6 
# 3 * 3 = 9 
# 3 * 4 = 12 
# 3 * 5 = 15 
# 3 * 6 = 18 
# 3 * 7 = 21 
# 3 * 8 = 24 
# 3 * 9 = 27 
# 3 * 10 = 30 

相关文章

网友评论

      本文标题:R语言之入门必读

      本文链接:https://www.haomeiwen.com/subject/jvdimqtx.html