文章目录

  • 写在前面
  • R语言GUI操作
    • 基本的快捷键与命令
      • 帮助命令
  • R Studio
    • 常用快捷键
  • R语言基础语法
    • 变量操作
    • 运算符
    • 数据类型
      • 数据类型的判断
    • 向量的基本操作
      • 创建向量(数值类型)
      • 基本运算
    • 矩阵(数组)的基本操作
    • 控制流语句
      • 循环语句
        • for循环:for (name in vector_expr) expr
        • while循环:while (condition) expr
        • repeat循环:repeat expr
      • 条件语句
        • if-else语句
        • ifelse语句
        • switch语句
    • 用户自定义函数
      • 几个例子
        • 阶乘的递归生成
        • 组合数的计算
        • Fibonacci数的生成
        • 二分法求根
        • Newton法求根
        • 求TTT统计量
        • 求解数值积分(递归调用)
  • R语言导入导出数据
    • 使用数据框结构输入数据
      • 少量数据键盘输入
      • 大量数据行外部导入
        • 文本文件
        • Excel文件

写在前面

由于MATLAB不能用了,开源数据分析软件的学习热度最近越来越高,掌握一门数据分析&统计的编程语言尤为必要。正好最近在学习R语言,下面就总结一下一些R语言的基本操作。

R语言GUI操作

学习R语言必装的GUI界面软件,清华镜像下载链接。个人感觉界面跟Lingo有几分类似,看起来有点粗糙。

基本的快捷键与命令

清屏命令:Ctrl+L


保存工作镜像:Ctrl+S

退出工作镜像:q()


导入包:library(base)

安装包:install.packages(base)


查看当前工作目录:getwd()

修改当前工作目录:setwd("E:/Desktop/")

注意:在Windows平台下目录默认为反斜杠,R 会认为其为转义字符,故使用双反斜杠或者直接改成斜杠即可。


帮助命令

  1. help.start()直接在默认浏览器打开本地帮助文件(HTML)
  2. ?打开当前项目的help
  3. ??打开相关项目的父级help

R Studio

R语言的首选集成开发环境,刚入门的我选择Desktop版本就够用了.官网下载链接。

里面的一些快捷键与GUI版本的R类似,不过多了TAB命令补全以及工作目录、绘图窗口、包管理等多个界面,操作起来更加方便快捷。并且RStudio还支持RMarkdown文件,顾名思义就是使用Markdown语法的文件,只不过多了一点功能,就是可以直接运行R代码,还有个类似于Jupyter Notebook的笔记本文件RNotebook,关于这两个文件格式下回说。

常用快捷键

清屏:Ctrl+L
注释/取消注释:Ctrl+Shift+C
删除光标所在行:Ctrl+D
更改当前工作目录:Ctrl+Shift+H
退出:Ctrl+Q

R语言基础语法

变量操作

变量赋值:x <- 1或者1 -> x或者assign("x", 1)

查看所有变量:ls()

清除所有变量:rm(list=ls(all=TRUE))

查看变量的类型:mode(x)

查看变量的长度(元素个数):length(x)

运算符

赋值:x <- 1或者1 -> x

四则运算:+ - * /

乘方:2^3

不等于:2!=3

整数除法:5 %/% 3其结果为1

求余:5 %% 3结果为2

数据类型

数值类型:numeric,包括:数值,数组(向量,矩阵)

字符串类型:character,使用双引号或单引号

逻辑值:TRUE,FALSE(也可以简记为T和F)

非数值:NA(缺失值)、Inf(无穷)、NAN(不确定的数,如0/0)

列表:list,包括数据框(data.frame)

数据类型的判断

> is.na(NA)
[1] TRUE> is.numeric(NA)
[1] FALSE> is.finite(1/0)
[1] FALSE> is.nan(0/0)
[1] TRUE> is.infinite(1/0)
[1] TRUE

向量的基本操作

创建向量(数值类型)

使用函数c()进行向量的创建

x <- c(1, 2, 3)
# 等价于
x <- c(1:3)

基本运算

  1. 求和:sum(x)
  2. 逐项乘积:prod(x)
  3. 取平均:mean(x)
  4. 求方差:var(x)
  5. 求标准差:sd(x)

矩阵(数组)的基本操作

  1. 矩阵乘法:A%*%B
  2. 矩阵的转置:t(A)
  3. 矩阵的求逆:solve(A)
  4. 方阵的行列式:det(A)
  5. 矩阵的对角元素:diag(A)
  6. 矩阵的QR分解:qr(A)
  7. 矩阵的奇异值分解:svd(A)
  8. 矩阵的特征值与特征向量:eigen(A)

控制流语句

循环控制语句:

  • break:用于跳出循环
  • next:类比Python的pass,执行循环而无实质内容

下面的expr指表达式expression

循环语句

for循环:for (name in vector_expr) expr

for (i in 1:5) print("Hello!")

while循环:while (condition) expr

x <- 5 # 需要初始条件
while(x > 0) {print(x); x <- x-1}

repeat循环:repeat expr

需要break语句来跳出循环。

f <- 1;f[2] <- 1; i <- 1;
repeat {f[i+2] <- f[i] + f[i+1]i <- i+1if (f[i] + f[i+1] < 1000) next else break
}f

条件语句

if-else语句

> x <- 3
> if (x != 1) print("male") else print("female")
[1] "male"

ifelse语句

> x <- 9
> ifelse(x>=0, print('非负数'), print('负数'))
[1] "非负数"
[1] "非负数"

需要注意,上面语句会产生两条同样的输出,其原因是print()函数除了会打印内容到屏幕,还会赋值给一个新的变量,所以导致了这种情况的出现。

switch语句

> a <- c("apple", 'banana')
> for (i in a) print(switch(i, banana="香蕉", apple="苹果", orange="橘子"))
[1] "苹果"
[1] "香蕉"

用户自定义函数

name <- function(arg_1, arg_2, ...) expression

几个例子

阶乘的递归生成

Factorial <- function(n) {if (n == 0 || n == 1) return(1)else return(n * Factorial(n-1))
}Factorial(3)

组合数的计算

binom <- function(n, k) {Factorial(n)/(Factorial(k) * Factorial(n-k))
}binom(4, 2)

Fibonacci数的生成

f <- 1;f[2] <- 1; i <- 1;
while (f[i] + f[i+1] < 1000) {f[i+2] <- f[i] + f[i+1]i <- i+1
}f

二分法求根

# 定义二分法函数
fzero <- function(f, a, b, eps=1e-5){if (f(a)*f(b) > 0)list(fail="finding root is fail.")else{repeat {# 达到精度,跳出循环if (abs(b - a) < eps) breakx <- (a+b) / 2if (f(a) * f(x) < 0) b <- x else a <- x}list(root=(a+b)/2, fun=f(x))}
}# 定义待求函数
f <- function(x) x^3 - x - 1;
# 求根
fzero(f, 1, 2, 1e-6)

Newton法求根

Newton法的迭代格式为
x(k+1)=x(k)−[J(x(k))]−1f(x(k)),k=0,1,2,⋯,x^{(k+1)}=x^{(k)}-[J(x^{(k)})]^{-1}f(x^{(k)}), \quad k=0,\,1,\,2,\,\cdots, x(k+1)=x(k)−[J(x(k))]−1f(x(k)),k=0,1,2,⋯,

其中:
J(x)=[∂f1∂x2∂f1∂x1⋯∂f1∂xn∂f2∂x2∂f2∂x1⋯∂f2∂xn⋮⋮⋱⋮∂fn∂x2∂fn∂x1⋯∂fn∂xn]J(x)= \begin{bmatrix} \frac{\partial f_1}{\partial x_2}&\frac{\partial f_1}{\partial x_1}&\cdots&\frac{\partial f_1}{\partial x_n}\\ \frac{\partial f_2}{\partial x_2}&\frac{\partial f_2}{\partial x_1}&\cdots&\frac{\partial f_2}{\partial x_n}\\ \vdots&\vdots&\ddots&\vdots\\ \frac{\partial f_n}{\partial x_2}&\frac{\partial f_n}{\partial x_1}&\cdots&\frac{\partial f_n}{\partial x_n}\\ \end{bmatrix} J(x)=⎣⎢⎢⎢⎢⎡​∂x2​∂f1​​∂x2​∂f2​​⋮∂x2​∂fn​​​∂x1​∂f1​​∂x1​∂f2​​⋮∂x1​∂fn​​​⋯⋯⋱⋯​∂xn​∂f1​​∂xn​∂f2​​⋮∂xn​∂fn​​​⎦⎥⎥⎥⎥⎤​

# Newton法迭代的函数
Newtons <- function(fun, x, eps=1e-5, it_max=100) {index <- 0; k <- 1;while (k <= it_max) {x1 <- x; obj <- fun(x);x <- x - solve(obj$J, obj$f);norm <- sqrt((x - x1) %*% (x - x1))# 达到精度,跳出循环,index赋值为1表示计算成功if (norm < eps) {index <- 1; break}k <- k+1}obj <- fun(x);list(root=x, it_num=k, index=index, FunVal=obj$f)
}# 待求方程组及计算其Jacobi矩阵的函数
funs <- function(x) {f <- c(x[1]^2 + x[2]^2 - 5, (x[1] + 1) * x[2] - (3 * x[1] + 1));J <- matrix(c(2*x[1], 2*x[2], x[2]-3, x[1]+1), nrow=2, byrow = T);list(f=f, J=J)
}# 求解该方程组
Newtons(funs, c(0, 1))

求TTT统计量

首先根据方差相同且未知时的TTT统计量的计算公式:
T=X‾−Y‾S1n1+1n2,T=\frac{\overline{X}-\overline{Y}}{S\sqrt{\frac1{n_1}+\frac1{n_2}}}, T=Sn1​1​+n2​1​​X−Y​,
其中
S2=(n1−1)S12+(n2−1)S22n1+n2−2,S^2=\frac{(n_1-1)S_1^2+(n_2-1)S_2^2}{n_1+n_2-2}, S2=n1​+n2​−2(n1​−1)S12​+(n2​−1)S22​​,

显然得到以下函数

# 定义计算T统计量的函数
cal_T <- function(y1, y2) {n1 <- length(y1); n2 <- length(y2);yb1 <- mean(y1); yb2 <- mean(y2);square_s1 <- var(y1); square_s2 <- var(y2);square_s <- ((n1-1) * square_s1 + (n2-1) * square_s2) / (n1 + n2 - 2);T <- (yb1 - yb2) / sqrt(square_s * (1 / n1 + 1 / n2)); T
}# 输入数据A, B
A <- c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04,79.97, 80.05, 80.03, 80.02, 80.00, 80.02)
B <- c(80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95,79.97)
# 进行计算
cal_T(A, B)

求解数值积分(递归调用)

KaTeX parse error: Undefined control sequence: \mbox at position 37: …thrm{d}x, \quad\̲m̲b̲o̲x̲{精度}\varepsilon…

采用复化梯形公式
Tn=h2∑k=0n−1[f(xk)+f(xk+1)]=h2∑k=0n−1[f(a)−2∑k=1n−1f(xk)+f(b)]T_n = \frac h2\sum\limits_{k=0}^{n-1}\left[f(x_k)+f(x_{k+1})\right]=\frac h2\sum\limits_{k=0}^{n-1}\left[f(a)-2\sum_{k=1}^{n-1}f(x_k)+f(b)\right] Tn​=2h​k=0∑n−1​[f(xk​)+f(xk+1​)]=2h​k=0∑n−1​[f(a)−2k=1∑n−1​f(xk​)+f(b)]

# 递归计算数值积分
area <- function(f, a, b, eps=1e-6, lim=10) {fun1 <- function(f, a, b, fa, fb, a0, eps, lim, fun) {d <- (a+b)/2; h <- (b-a) / 4; fd <- f(d);a1 <- h * (fa + fd); a2 <- h * (fd + fb);if (abs(a0 - a1 - a2) < eps || lim == 0)return (a1 + a2)else {return (fun(f, a, d, fa, fd, a1, eps, lim - 1, fun) + fun(f, d, b, fd, fb, a2, eps, lim - 1, fun))}}# 设定初始值fa <- f(a); fb <- f(b); a0 <- ((fa + fb) * (b - a)) / 2fun1(f, a, b, fa, fb, a0, eps, lim, fun1)
}#定义函数
f <- function(x) 1/x# 计算数值积分
quad <- area(f, 1, 5); quad

R语言导入导出数据

使用数据框结构输入数据

少量数据键盘输入

mydata <- data.frame(age=numeric(0), weight=numeric(0), gender=character(0));
mydata <- edit(mydata)
# 另一种更加直接的方法
fix(mydata)

大量数据行外部导入

文本文件

方法一:

默认以ASCII码进行编码,需要更改编码方式(文件另存为ASCII格式)。

data <- read.table("F:/data/data.txt", header=TRUE, sep=",", what=character(0))
head(data)  # 默认读取前6行数据(不含列索引)

方法二:

使用scan()函数可以直接读取纯文本文件中的数据。

data1 <- scan("F:/data/data.txt")
data1

Excel文件

另存为逗号分隔符文件(.CSV), 可以进行直接读取

data1 <- read.table("F:/data/data.csv", header=TRUE, sep=",")
head(data1)

R语言学习笔记(一)R语言的基本操作与函数相关推荐

  1. c语言注释语句执行吗,C语言学习笔记之C语言概念解析(附资料分享)每一个语句都必须以分号结尾但预处理命令函数头和花括号“}”之后不能加分号...

    [[怪兽爱C语言]C语言学习笔记之C语言概念解析(附资料分享)]https://toutiao.com/group/6582429294901854728/?iid=15906422033&a ...

  2. Dart 语言学习笔记(Dart语言完全指南)

    Dart 语言学习笔记 Part 1:概览 Dart是一门纯OOP语言.所有的类都继承于Object类.null也是对象,变量仅仅存储对象的引用 Dart是强类型语言,即使Dart可以进行类型推断(使 ...

  3. C语言学习笔记---初始C语言006

    C语言程序设计笔记---006 C语言初识关键字和宏定义 1.数据类型关键字 2.存储类型关键字 3.控制语句关键字 3.1.跳转结构关键字: 3.2.循环结构关键字: 3.3.分支结构关键字: 3. ...

  4. C语言学习笔记---初始C语言001

    C语言程序设计笔记---001 初识C语言 1.C语言的标准 2.C语言的特点 3.第一个C程序 ***/知识点汇总/*** 基于VS2019编译器展示一下 代码片: 4.自我介绍 初识C语言 1.前 ...

  5. C语言学习笔记:C语言的指针函数与函数指针??

    前言 在C语言里函数.指针这两个词结合的顺序不同其意义也不同,即指针函数与函数指针的意义不同,这是什么情况呢?估计许多学习C语言的小伙伴已经感觉自己懵懵的了,别急且听小编来说个明白. 指针函数 指针函 ...

  6. C语言学习笔记之C语言简史(不看后悔系列)

    文章目录 C语言简史 一.什么是C语言? 只要计算机体系架构不变,C语言就会长盛不衰. C语言简史 一.什么是C语言? 麻省理工学院,AT&T贝尔实验室,通用电气,三方大佬,准备为GE-645 ...

  7. [R语言学习笔记1] R语言for循环的使用

    学习R语言的过程中,后期逐渐就会用循环语句来减少自己的重复工作.所以了解for循环,是必备技能之一. R语言中的for循环结构是: for (循环变量 in 序列向量){表达式1表达式2...} 要注 ...

  8. R语言学习笔记--《R语言实战》

    文章目录 R语言基础 一.数据结构 1. 向量 2. 矩阵 3. 数组 4. 数据框 5.列表 二.数据输入 1.键盘输入 2.分隔符文本输入 (csv) 图形初阶 一.图形参数 1.符号和线条 2. ...

  9. r语言绘制精美pcoa图_[R语言 学习笔记]用R做主坐标分析(PCoA)

    原始数据为遗传距离矩阵,使用ape包的pcoa函数进行主坐标分析,然后使用ggplot2进行绘图. 欢迎大家批评指正 转载请标明出处:https://www.ivistang.com/articles ...

  10. C语言学习笔记1——C语言程序

    C语言简介: BCPL ->newB ->C ->UNIX ->Minux ->Linux ->gcc C语言诞生于1970-1973年,在肯·汤姆逊和丹尼斯·里奇 ...

最新文章

  1. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程
  2. 使用jmeter测试java程序
  3. java.util.Random 实现原理
  4. Oracle11g 修改数据库编码(UTF-8修改为GBK)
  5. python 异常分类_Python异常类型
  6. 2020_12-电路理论框架复习思考-基础篇
  7. azure db 设置时区_在Azure Cosmos DB中应用字段运算符和对象
  8. 迫不及待,英特尔推特“官宣”GPU发布时间
  9. mapreduce代码示例_MapReduce算法示例
  10. 栅格化渲染源码解析-neural_renderer源码(三)栅格化
  11. 华维单片机编程-无线红外探测器03-环境搭建及程序详解
  12. xmanager5连接CENTOS6
  13. JS 实现驼峰式转下横线,下横线转驼峰式2
  14. svn co 指定用户名
  15. Android IO流程你真的清楚了吗|硬核科普
  16. php生鲜超市系统,毕业论文:基于PHP平台下的Ajax开发实践—网上生鲜超市系统的开发...
  17. c++ opencv实现图像对比度增强
  18. SEH X64(1)
  19. RS232转Profinet网关连接3路扫码枪配置案例
  20. 卷完了!分享下我的秋招面经(投递近50家自动驾驶与机器人公司)

热门文章

  1. MapReduce基础
  2. tomcat,Jboss,weblogic区别与比较
  3. C语言keywordstatic的绝妙用途
  4. linux修改rm指令执行(数据安全)
  5. 总结几种结构体初始化方法 (转)
  6. python opencv用法中文教程
  7. 栈2——局部变量要初始化的原因
  8. RTT内核对象——内核对象的派生
  9. ftpclient怎么获取到该目录下面得文件_你应该知道的10种Python文件系统方法
  10. this关键字的使用案例