R_基础语法自用速查

R

[TOC]

安装与调试

退出解释器:q()
命令行运行:Rscript filename.R

基础语法

变量与基础操作

查看已定义的变量列表:ls()
print(ls()) 
删除变量:rm()
rm(varname)
输出结果拼接:cat()

用逗号分隔拼接部分

内容输出到文件:cat(内容,file=“filepath”[,append=TRUE])

建议用绝对路径, Windows 路径格式为 D:\r_test.txt。

append表示追加写入,不添加时为覆盖

控制台输出到文件:sink("filepath"[,split=TRUE] [,append=TRUE])

split表示保留控制台输出。

默认是覆盖写入。

调用无参数sink()可以取消

从文件读入文字:readLines("filepath")
获取当前工作目录 :getwd()
设置当前工作目录: setwd()
整除与整除求余:%%,%/%。

优先级仅次于乘方和括号

冒号运算符/整数向量/向量运算相关: :
 v <- 1:10
 print(v) 

输出:1 2 3 4 5 6 7 8 9 10

判断数字是否在向量v/向量运算相关:num %in% v
矩阵与它转置的矩阵相乘/矩阵运算:M %*% t(M)
数学函数:
sqrt(n) n的平方根
exp(n) 自然常数e的n次方,
log(m,n) m的对数函数,返回n的几次方等于m
log10(m) 相当于log(m,10)
round (n) 对 n 四舍五入取整
(n, m) 对 n 保留 m 位小数四舍五入
ceiling (n) 对 n 向上取整
floor (n) 对 n 向下取整
NA与NULL

缺失,没有值,但位置存在

数据不存在

向量

生成:a=c(l,r)。 可通过数组下标取用,从1开始。

可能有间隙的等差数列:seq(l,r,gap)

m到n的等差数列:seq(l,r,step)

重复数列:rep(num,重复次数)

> a = c(10, 20, 30, 40, 50)
> a[2]
[1] 20

> a[1:4] # 取出第 1 到 4 项,包含第 1 和第 4 项
[1] 10 20 30 40
> a[c(1, 3, 5)] # 取出第 1, 3, 5 项
[1] 10 30 50
> a[c(-1, -5)] # 去掉第 1 和第 5 项
[1] 20 30 40

可以对向量做标量运算、逻辑运算,效果是每个元素依次运算

排序:sort、rev(反向)、order(返回向量排序后的下标)、a[order(a)]输出的是排序后的向量

统计学函数:

sum 求和
mean 求平均值
var 方差
sd 标准差
min 最小值
max 最大值
range 取值范围(二维向量,最大值和最小值)

筛选: (vector[which(vector >= a & vector < b)]

all\any。 all() 用于检查逻辑向量是否全部为 TRUE,any() 用于检查逻辑向量是否含有 TRUE。

字符串
> toupper("Runoob") # 转换为大写

[1] "RUNOOB"

> tolower("Runoob") # 转换为小写

[1] "runoob"

> nchar("中文", type="bytes") # 统计字节长度

[1] 4

> nchar("中文", type="char") # 总计字符数量

[1] 2

> substr("123456789", 1, 5) # 截取字符串,从 1 到 5

[1] "12345"

> substring("1234567890", 5) # 截取字符串,从 5 到结束

[1] "567890"

> as.numeric("12") # 将字符串转换为数字

[1] 12

> as.character(12.34) # 将数字转换为字符串

[1] "12.34"

> strsplit("2019;10;1", ";") # 分隔符拆分字符串

[[1]]

[1] "2019" "10"   "1"

> gsub("/", "-", "2019/10/1") # 替换字符串

[1] "2019-10-1"

> print(paste(letters[1:6],1:6, sep = "", collapse = "="))

[1] "a1=b2=c3=d4=e5=f6" # 拼接,cpllapse是拼接的连接

> format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none"))

    #     x : 输入对向量

    #   digits : 显示的位数

    #   nsmall : 小数点右边显示的最少位数

    #   scientific : 设置科学计数法

    #   width : 通过开头填充空白来显示最小的宽度

    #   justify:设置位置,显示可以是左边、右边、中间等。

如果在 UTF-8 编码的计算机上运行,单个中文字符的字节长度应该是 3。

列表,一种筐

创建: list_data <- list( )

命名: names(list_data) <- c("Sites", "Numbers", "Lists")

访问: 1.按下标 2.按名字print(list_data$Name)

添加: list_data[最后一个下标+1] <- "新元素" 也可用于更新

删除: list_data[4] <- NULL

合并: merged.list <- c(list1,list2)

列表转向量: v1 <- unlist(list1)

矩阵

v=c() m= matrix(vector,行数,列数,byrow=,dimnames=) 向量会逐列填充,添加byrow为TRUE会按行填充,dimaname用于设置行列名

rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")

P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))

查询:按二维数组查询

命名:行列都可以设定名称:

> colnames(m1) = c("x", "y", "z")
> rownames(m1) = c("a", "b")
> m1
  x y z
a 1 2 3
b 4 5 6
> m1["a", ]
x y z
1 2 3

矩阵乘法:

> m1 = matrix(c(1, 2), 1, 2)
> m2 = matrix(c(3, 4), 2, 1)
> m1 %*% m2
     [,1]
[1,]   11

矩阵乘除:* / 按位逐个相互运算

逆矩阵:solve(A)

转置矩阵:t()

矩阵分行分列计算: apply()。如apply(A, 1, sum)。参数为1按行操作,参数为2按列操作

数组
# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# 创建数组,并设置各个维度的名称
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names,matrix.names))
print(result)

# 显示数组第一个矩阵中第一行第三列的元素,三个参数分别是行列个
print(result[1,3,1])

# 跨维度计算 数组 数据名称 计算函数
apply(x, margin, fun)

# 计算数组中所有矩阵第一行的数字之和
result <- apply(new.array, c(1), sum)
print(result)
因子(类别数据)
factor(x = character(), levels, labels = levels,
       exclude = NA, ordered = is.ordered(x), nmax = NA)
x <- c("男", "女", "男", "男",  "女")
sex <- factor(x)
print(sex)
print(is.factor(sex))

[1] 男 女 男 男 女
Levels: 男 女
[1] TRUE
# levels 类别 nlevels 类别数目
数据框(dataframe 表格)
  • : 列向量,可以是任何类型(字符型、数值型、逻辑型),一般以 tag = value 的形式表示,也可以是 value。
  • row.names: 行名,默认为 NULL,可以设置为单个数字、字符串或字符串和数字的向量。
  • check.rows: 检测行的名称和长度是否一致。
  • check.names: 检测数据框的变量名是否合法。
  • fix.empty.names: 设置未命名的参数是否自动设置名字。
  • stringsAsFactors: 布尔值,字符是否转换为因子,factory-fresh 的默认值是 TRUE,可以通过设置选项(stringsAsFactors=FALSE)来修改。
data.frame(…, row.names = NULL, check.rows = FALSE,
           check.names = TRUE, fix.empty.names = TRUE,
           stringsAsFactors = default.stringsAsFactors())
table = data.frame(
    姓名 = c("张三", "李四"),
    工号 = c("001","002"),
    月薪 = c(1000, 2000)
   
)
print(table) # 查看 table 数据

# 获取数据结构
str(table)
# 显示概要
print(summary(table)) 
# 提取指定的列
result <- data.frame(table$姓名,table$月薪)
print(result)
# 读取第 2 、3 行的第 1 、2 列数据:
result <- table[c(2,3),c(1,2)]
# 添加部门列
table$部门 <- c("运营","技术","编辑")
# 将向量组合成数据框
addresses <- cbind(sites,likes,url)
# 合并两个数据框
result <- rbind(table,newtable)
数据重塑(=sql的join,用的时候再看,估计用不上,大概)
  • x, y: 数据框
  • by, by.x, by.y:指定两个数据框中匹配列名称,默认情况下使用两个数据框中相同列名称。
  • all:逻辑值; all = L 是 all.x = L 和 all.y = L 的简写,L 可以是 TRUE 或 FALSE。
  • all.x:逻辑值,默认为 FALSE。如果为 TRUE, 显示 x 中匹配的行,即便 y 中没有对应匹配的行,y 中没有匹配的行用 NA 来表示。
  • all.y:逻辑值,默认为 FALSE。如果为 TRUE, 显示 y 中匹配的行,即便 x 中没有对应匹配的行,x 中没有匹配的行用 NA 来表示。
  • sort:逻辑值,是否对列进行排序。
# merge函数
merge(x, y, by = intersect(names(x), names(y)),
      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
      sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
      incomparables = NULL, …)

https://www.runoob.com/r/r-data-reshaping.html

分支语句

if语句:和c一样
switch:switch(expression, case1, case2, case3....)
#1.按值匹配。整数匹配不在范围内的则返回NULL。
x <- switch(
   3,
   "google",
   "runoob",
   "taobao",
   "weibo"
)
print(x)
[1] "taobao"

#2.按变量匹配
you.like<-"runoob"
switch(you.like, google="www.google.com", runoob = "www.runoob.com", taobao = "www.taobao.com")
[1] "www.runoob.com"

循环语句

repeat

循环,直到condition为true,退出用break

repeat { 
    // 相关代码 
    if(condition) {
       break
    }
}
while

和c一样

for

和python一样

next

和continue一样

函数(全是懒加载)

定义函数
function_name <- function(arg_1, arg_2, ...) {
    // 函数体
}
调用

和python一样。

如果指定参数名和对应值,使用时可不按顺序排列传递参数

内置函数

seq(a,b)输出a到b

mean(a:b)输出a、b平均数

sum(a:b)计算a到b数字的和

# 查看包安装目录
.libPaths()
# 查看已安装的包
library()
# 安装包 清华源
install.packages("MASS", repos = "https://mirrors.ustc.edu.cn/CRAN/") 

饼状图
  • x: 数值向量,表示每个扇形的面积。

  • labels: 字符型向量,表示各扇形面积标签。

  • edges: 这个参数用处不大,指的是多边形的边数(圆的轮廓类似很多边的多边形)。

  • radius: 饼图的半径。

  • main: 饼图的标题。

  • clockwise: 是一个逻辑值,用来指示饼图各个切片是否按顺时针做出分割。

  • angle: 设置底纹的斜率。

  • density: 底纹的密度。默认值为 NULL。

  • col: 是表示每个扇形的颜色,相当于调色板。

pie(x, labels = names(x), edges = 200, radius = 0.8,
    clockwise = FALSE, init.angle = if(clockwise) 90 else 0,
    density = NULL, angle = 45, col = NULL, border = NULL,
    lty = NULL, main = NULL, …)
# 输出图片
png(file='runoob-pie.png', height=300, width=300)
# 数据准备
info = c(1, 2, 4, 8)

# 命名
names = c("Google", "Runoob", "Taobao", "Weibo")

# 涂色(可选)
cols = c("#ED1C24","#22B14C","#FFC90E","#3f48CC")
# 计算百分比
piepercent = paste(round(100*info/sum(info)), "%")
# 绘图
pie(info, labels=piepercent, main = "网站分析", col=cols, family='GB1')
# 添加颜色样本标注
legend("topright", names, cex=0.8, fill=cols)
#3D图
library(plotrix)
pie3D(info,labels = names,explode = 0.1, main = "3D 图",family = "STHeitiTC-Light")
条形图
  • H 向量或矩阵,包含图表用的数字值,每个数值表示矩形条的高度。

  • xlab x 轴标签。

  • ylab y 轴标签。

  • main 图表标题。

  • names.arg 每个矩形条的名称。

  • col 每个矩形条的颜色。

  • 中文字体需要设置字体参数 family='GB1'

  • beside 参数 beside 设置矩形条堆叠的方式,默认为 FALSE

    library(showtext);
    font_add("SyHei", "SourceHanSansSC-Bold.otf");
    cvd19 = matrix(
      c(83017, 83534, 1794546, 2640626, 190535, 585493),
      2, 3
    )
    
    # 设置文件名,输出为 png
    png(file = "runoob-bar-1.png")
    
    #加载字体
    showtext_begin();
    
    colnames(cvd19) = c("中国", "美国", "印度")
    rownames(cvd19) = c("6月", "7月")
    barplot(cvd19, main = "新冠疫情条形图", beside=TRUE, legend=TRUE,  family='SyHei')
    
    # 去掉字体
    showtext_end();
    
散点图
  • x 横坐标 x 轴的数据集合
  • y 纵坐标 y 轴的数据集合
  • type:绘图的类型,p 为点、l 为直线, o 同时绘制点和线,且线穿过点。
  • main 图表标题。
  • xlab、ylab x 轴和 y 轴的标签名称。
  • xlim、ylim x 轴和 y 轴的范围。
  • axes 布尔值,是否绘制两个 x 轴。

type 参数可选择值:

  • p:点图
  • l:线图
  • b:同时绘制点和线
  • c:仅绘制参数 b 所示的线
  • o:同时绘制点和线,且线穿过点
  • h:绘制出点到横坐标轴的垂直线
  • s:阶梯图,先横后纵
  • S:阶梯图,先纵后竖
  • n: 空图
#普通散点图
plot(x, y, type="p", main, xlab, ylab, xlim, ylim, axes)

#散点图矩阵
# 4 个变量绘制矩阵,12 个图,第一个参数是各个变量
pairs(~wt+mpg+disp+cyl,data = mtcars, main = "Scatterplot Matrix")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容