去海马体拍了证件照,最大的新闻,不会再有今天美美的样子啦,不会化妆的理科女的烦恼哇。over
R中的包叫做–>程序包,分为“基础包”和“扩展包”。“基础包”默认安装加载的,“扩展包”是需要安装加载的。
写函数的格式,以一个简单的为例
newscore <- function(x){ #函数名 <- function(原材料)
y <- sqrt(x) * 10 #对原材料进行处理
return(y) #成品展示哪一部分,就return()
}
注释: 函数内部命名与外部无关,内部对某变量进行的操作,并不影响函数外环境中的变量。
newscore <- function(x=36){ #为函数设置默认值
y <- sqrt(x) * 10 #
return(y)
}
注释: 为函数设置默认值,如果不设置,当输入的原材料不完整时,就会报错。
关于马尔萨斯人口增长模型,写函数
exponentialGrowth <- function(NO, r = 0.01, tmax =10 ){
#输入三个自变量,初始值,增长率(默认为0.01),时间(默认为10)
N <- NO
for (t in 1:(tmax-1)) {
N[t+1] <- N[t] + N[t] * r
}
return(N)
}
注释: 注意函数名后面不需要加括号,exponentialGrowth 即可,不能写成exponentialGrowth (),会报错。
kaifang <- function(x) sqrt(x)
cv <- function(x) print(sd(x)/mean(x))
注释: 如果操作语句较为简单,function()后可以直接接语句,也可以接print(),并且省略大括号。
source(file = )
以计算日出日落为例
library(maptools) #或者
require(maptools) # 调用包,让R把其中的函数读进R的脑子里。
position <- c(116.39, 39.91) # 天安门广场的经纬度。
mydate <- "2017-10-01" # 要计算的日期。
# 日出时刻:
sunriset(matrix(position, nrow = 1),
as.POSIXct(mydate, tz = "Asia/Shanghai"),
direction = c("sunrise"), POSIXct.out = TRUE)$time
# 日落时刻:
sunriset(matrix(position, nrow = 1),
as.POSIXct(mydate, tz = "Asia/Shanghai"),
direction = c("sunset"), POSIXct.out = TRUE)$time
用浏览器搜索 “cran + 包名”,比如在计算日出日落,用到了maptools包,可以搜索 cran maptools,便可以出现关于maptools包的所有信息,比如,
cran 包名
新建函数名为flag,函数内是计算某日期开始,一定天数的日出日落具体时间
sunriset()函数,依次填入具体地点经纬度,时间,看日出还是日落
flag <- function(date.start = '2017-02-14', date.length = 7){
mydate <- seq(as.POSIXct(date.start, tz = 'Asia/Shanghai'),
by = 3600*24, length.out = date.length)
data.frame(
sunrise = sunriset(
matrix(c(116.39, 39.91),nrow = 1),
as.POSIXct(mydate, tz = 'Asia/Shanghai'),
direction = c('sunrise'), POSIXct.out =TRUE)$time,
sunset = sunriset(
matrix(c(116.39,39.91), nrow = 1),
as.POSIXct(mydate, tz = 'Asia/Shanghai'),
direction = c('sunset'),POSIXct.out =TRUE)$time)
}
flag(date.start = '2019-3-15',date.length = 7)
练习9.4 计算所在地 2017-2116年,100年内的日出日落时间.
flag <- function(date.start = '2017-01-1', date.length = 100*365){
mydate <- seq(as.POSIXct(date.start, tz = 'Asia/Shanghai'),
by = 3600*24, length.out = date.length)
data.frame(
sunrise = sunriset(
matrix(c(113.3477210000, 23.1280570000),nrow = 1),
as.POSIXct(mydate, tz = 'Asia/Shanghai'),
direction = c('sunrise'), POSIXct.out =TRUE)$time,
sunset = sunriset(
matrix(c(113.3477210000, 23.1280570000), nrow = 1),
as.POSIXct(mydate, tz = 'Asia/Shanghai'),
direction = c('sunset'),POSIXct.out =TRUE)$time)
}
#beginr包的介绍
#加载'beginr',大鹏创建的包(Zhao,2017a)
install.packages('beginr')
#采用包名称::函数,就不用library()和require()来加载包
备忘函数
之前不记得的点型、线型、颜色等东西,这里面都有
beginr::plotpch()
beginr::plotlty()
beginr::plotcolorbar()
beginr::plotcolors()
beginr::plottype()
快速作图函数
x <- 1:10
y <- 1:10 + rnorm(10)
beginr::plotlm(x = x,y = y,refline = TRUE)
#以上效果和下面这条同理,上面就是大鹏放在例子里的函数
example(plotlm)
根据函数的图形来看数据的分布,是否属于正态分布,函数为beginr::plothist()
example("plothist")
#例子函数为
x <- rnorm(10000)
beginr::plothist(x)
pairs成对散点图,强化版plotpairs(),plotpairs2()
example("plotpairs")
example("plotpairs2")
为了比较两个pairs的区别,我们设置种子,看一下画图结果
set.seed(123456)
df <- data.frame(a = 1:10,
b = 1:10 + rnorm(10),
c = 1:10 + rnorm(10))
beginr::plotpairs(df)
beginr::plotpairs2(df)
一组自变量x和多组因变量y在同一坐标系;一组因变量y与多组自变量x在同一坐标系
par(mfrow = c(1,2), mar = c(0.1,0.1,0.1,0.1))
x <- seq(0, 2 * pi, length.out = 100)
y <- data.frame(sin(x), cos(x))
假定yerror是y的误差范围
yerror <- data.frame(abs(rnorm(100,sd = 0.3)),
abs(rnorm(100,sd = 0.1)))
beginr::dfplot(x, y, yerror = yerror)
beginr::dfplot2(y, x, xerror = yerror, xlab = '',ylab = '')
arrow()函数,可以用beginr包中的errorbar()函数,画出散点图的误差线
example('errorbar')
#等价于
x <- seq(0, 2 * pi, length.out = 100)
y <- sin(x)
plot(x,y, type = 'l')
beginr::errorbar(x, y, yupper = 0.1, ylower = 0.1)
计算任意两列的 R 2 R^2 R2,或者调整 R 2 R^2 R2,拟合直线的斜率、截距、各自的标准差、 P P P值。
example(lmdf)
#等同于
df <- data.frame(a = 1:10,
b = 1:10 + rnorm(10),
c = 1:10 + rnorm(10))
beginr::lmdf(df)
文件读写函数
都是在beginr包中的函数
example("list2ascii")
#等同于
alist <- list(a = 1:10, b = letters)
list2ascii(alist)
> beginr::bib(pkg = 'ggplot2')
@Book{R-ggplot2,
author = {Hadley Wickham},
title = {ggplot2: Elegant Graphics for Data Analysis},
publisher = {Springer-Verlag New York},
year = {2016},
isbn = {978-3-319-24277-4},
url = {http://ggplot2.org},
}
> beginr::bib(pkg = 'pinyin')
@Manual{R-pinyin,
title = {pinyin: Convert Chinese Characters into Pinyin, Sijiao, Wubi or Other
Codes},
author = {Peng Zhao},
year = {2018},
note = {R package version 1.1.5},
url = {https://CRAN.R-project.org/package=pinyin},
R中的一些语录–>fortunes包
library('fortunes')
fortunes::fortune('Actually, I see it as part of my job')
vignette("fortunes") #生成一个PDF,里面是一些语录
应用R中的包,调出其参考文献及其格式–>citation()
> citation('lattice')
To cite the lattice package in publications use:
Sarkar, Deepayan (2008) Lattice: Multivariate Data Visualization
with R. Springer, New York. ISBN 978-0-387-75968-5
A BibTeX entry for LaTeX users is
@Book{,
title = {Lattice: Multivariate Data Visualization with R},
author = {Deepayan Sarkar},
publisher = {Springer},
address = {New York},
year = {2008},
note = {ISBN 978-0-387-75968-5},
url = {http://lmdvr.r-forge.r-project.org},
}
查看R中已经发布的包的数量
length(unique(rownames(available.packages()))) #截至到此刻又13867个包了呢
#以上函数一层层释义为
a <- available.packages() # 获取所有扩展包的信息
b <- rownames(a) # 挑出扩展包的名称
c <- unique(b) # 去掉重复的名称
d <- length(c) # 数数有几个
查看某包从某日起被下载的情况
beginr::plotpkg('rmarkdown',from = '2014-01-01')
beginr::plotpkg('beginr',from = '2018-01-01')
练习9.6 制作动画(答案copy的,段位不够)
library(animation)
demo('fireworks')
citation('animation')
练习9.7 绘制风玫瑰图
library(openair)
example("windRose")
citation('openair')
关于R包的开发
> system('g++ -v')
> system('where make')
C:\Rtools\bin\make.exe
install.packages(c('devtools','roxygen2','knitr','beginr'))
library('devtools')
library('roxygen2')
library('knitr')
library('beginr')
beginr::rpkg()
Package: mypkg
Title: Caculate New Score
Version: 0.0.0
Author: Suzi Sun
Maintainer: Suzi Sun
Description: Get a better score.
License: GPL
Encoding: UTR-8
LazyData: true
#' Caculate new score
#'
#' @param x old score
#'
#' @return new score
#' @export
#'
#' @examples newscore(49)
newscore <- function(x) {
y <- sqrt(x) * 10
return(y)
}
library(mypkg)
newscore(36)
example(newscore)
极简建包