首页 > 其他分享 >R语言学习笔记(一)

R语言学习笔记(一)

时间:2024-02-21 19:01:01浏览次数:23  
标签:输出 语言 runoob 笔记 学习 test txt 函数

什么是R语言

来源于维基百科

R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。

如果你是一个计算机程序的初学者并且急切地想了解计算机的通用编程,R 语言不是一个很理想的选择,可以选择 Python、C 或 Java。

R 语言与 C 语言都是贝尔实验室的研究成果,但两者有不同的侧重领域,R 语言是一种解释型的面向数学理论研究工作者的语言,而 C 语言是为计算机软件工程师设计的。

R 语言是解释运行的语言(与 C 语言的编译运行不同),它的执行速度比 C 语言慢得多,不利于优化。但它在语法层面提供了更加丰富的数据结构操作并且能够十分方便地输出文字和图形信息,所以它广泛应用于数学尤其是统计学领域。

R由新西兰奥克兰大学的统计学家罗斯·伊哈卡和罗伯特·杰特曼开发,现在由R核心小组负责开发,同时也有其他用户编写了诸多外挂的软件包。R以S语言为基础,其词法作用域语义来自Scheme。R的后台程序大多由C语言、FORTRAN语言和R自己写成。

R语言是GNU计划的一个项目,所以其源代码可自由下载使用。R也有已编译的可执行文件版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。R可以以命令行操作,同时有人开发了几种图形用户界面,其中包括RStudio与Jupyter。

在TIOBE2022年1月对编程语言人气的排名中,R排名第12。

发展历程

R语言以S语言为基础,增加了Scheme语言中词法作用域这一机制,使程序员得以将代码中某一对象的适用范围限制到一小段代码之中。S由里克·贝克尔、约翰·钱伯斯、道格·邓恩、琼·麦克雷、以及朱迪·席林于1976年前后于贝尔实验室发明。S是一种用于数据分析的解释型语言,无需编译器即可运行。通常用S语言编写的代码都可以不作修改地在R环境下运行。Scheme是Lisp语言的一个分支,由杰拉尔德·J·萨斯曼和小盖伊·L·斯蒂尔于1975年前后在麻省理工学院发明。

1991年,新西兰奥克兰大学的统计学家罗斯·伊哈卡和罗伯特·杰特曼开始对S语言的一个新版本进行开发。伊哈卡与杰特曼两人名前缀字母都是R,R语言因此得名。同时,R这个单一字母的名字也表明R语言与S语言一脉相承。1993年8月,伊哈卡与杰特曼在数据平台StatLib和邮件列表s-news中发布了R的早期版本。1995年,在统计学家马丁·梅克勒的建议下,伊哈卡与杰特曼通过GNU通用公共许可证把R做成了一款免费开源软件。软件于1995年6月进行了首次官方发布。首个稳定测试版本(1.0)于2000年2月29日发布。

R综合文件网(Comprehensive R Archive Network;CRAN)于1997年4月23日正式上线。CRAN除了收藏了R的可执行文件下载版、源代码和帮助文档,也收录了各种用户撰写的R软件包。CRAN最早有3个镜像以及12个软件包。截止2022年1月,CRAN有101个镜像站以及18728个软件包。

同样在1997年,R核心小组正式成立,以进一步对R语言进行开发。截止2022年1月,小组成员包括伊哈卡、杰特曼、钱伯斯以及梅克勒,同时也包括了统计学家库尔特·奥尔尼克、道格拉斯·贝茨、彼得·达尔高、卢克·蒂尔尼、弗里德里希·莱施、托马斯·拉姆利、邓肯·坦普尔·朗、迈克尔·劳伦斯、乌韦·利格斯、布莱恩·里普利、塞巴斯蒂安·迈耶、保罗·默雷尔、马丁·普卢默、迪伊潘·萨卡尔、西蒙·乌尔巴内克以及计算机科学家托马斯·卡利贝拉。小组过去的成员包括塞思·福尔肯、圭多·马萨罗托、邓肯·默多克、马丁·摩根、海纳·施瓦特以及斯特凡诺·雅各斯。2003年4月,一个名为R基金会的非盈利组织正式成立,为的是更好地对R语言的开发提供支持。

内置功能

R主要用于数据分析。在R语言中,用于信息存储的数据结构包括向量、数组、列表以及数据框。向量指一组带有固定顺序, 数据类型唯一的字符串或数值,其内容可以填写到一维或多维的数组之中。二维数组也叫做矩阵。R支持各种数组运算,与自由软件GNU Octave和商业软件MATLAB的功能有所重叠。列表指一组数据类型可能有所不同的对象。一个字符串向量与数值向量合在一起就可以成为一个列表。数据框本质上是一个列表,里面包含了一个或多个长度相同的向量。数据框将这些向量合并成表格,每一行都有一个单一的名称。标量这一数据类型在R语言中并不存在,所谓的标量就是一个长度为一的向量。

用户可以用R来进行一些基本的统计检验,构建线性及非线性的模型,对时间序列加以分析,或对数据进行分类与聚类分析。R的另一强项是绘图功能,画出的图表能够达到专业出版物的要求,也可加入数学符号。计算强度较大时,用户可在程序中嵌入C、C++以及FORTRAN语言以帮助运算。

因为S的血缘,R比其他统计学或数学专用的编程语言有更强的面向对象(面向对象程序设计, S3, S4等)功能。

R基础语法

R 语言的有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成。

变量名称以字母或点开头。

变量名 是否正确 原因
var_name2. 正确 字符开头,并由字母、数字、下划线和点号组成
var_name% 错误 % 是非法字符
2var_name 错误 不能数字开头
.var_name, var.name 正确 可以 . 号开头,但是要注意 . 号开头后面不能跟着数字
.2var_name 错误 . 号开头后面不能跟着数字
_var_name 错误 不能以下划线 _ 开头

最新版本的 R 语言的赋值可以使用左箭头 <-、等号 = 、右箭头 -> 赋值:

print() 是 R 语言的输出函数,和其他编程语言一样,R 语言支持数字、字符等输出。

输出的语句十分简单:

print("RUNOOB")

R 语言与 node.js 和 Python 一样,是解释型的语言,所以我们往往可以像使用命令行一样使用 R 语言。

如果我们在一行上进输入一个值,那么 R 也会把它直接标准化输出:

> 5e-2 [1] 0.05

如果需要输出结果的拼接,我们可以使用 cat() 函数:
实例
> cat(1, "加", 1, "等于", 2, '\n') 1 加 1 等于 2

cat() 函数会在每两个拼接元素之间自动加上空格。
输出内容到文件

R 语言输出到文件的方法十分多样,而且很方便。

cat() 函数支持直接输出结果到文件:

cat("RUNOOB", file="/Users/runoob/runoob-test/r_test.txt")

这个语句不会在控制台产生结果,而是把 "RUNOOB" 输出到 "/Users/runoob/runoob-test/r_test.txt" 文件中去。

file 参数可以是绝对路径或相对路径,建议使用绝对路径,Windows 路径格式为 D:\r_test.txt。

cat("RUNOOB", file="D:\\r_test.txt")

注意:这个操作是"覆盖写入"操作,请谨慎使用,因为它会将输出文件的原有数据清除。如果想"追加写入",请不要忘记设置 append 参数:

cat("GOOGLE", file="/Users/runoob/runoob-test/r_test.txt", append=TRUE)

sink() 函数可以把控制台输出的文字直接输出到文件中去:

sink("/Users/runoob/runoob-test/r_test.txt")

这条语句执行以后,任何控制台上的输出都会被写入到 "/Users/runoob/runoob-test/r_test.txt" 文件中去,控制台将不会显示输出。

注意:这个操作也是"覆盖写入"操作,会直接清除原有的文件内容。

如果我们依然像保留控制台的输出,可以设置 split 属性:

sink("/Users/runoob/runoob-test/r_test.txt", split=TRUE)

如果想取消输出到文件,可以调用无参数的 sink()

可能我们会联想到 C 语言中的 scanf 、Java 中的 java.util.Scanner,如果你学习过 Python 可能对 input() 函数更熟悉。但是 R 语言本身作为一种解释型的语言,更类似于一些终端脚本语言(比如 bash 或者 PowerShell),这些语言是基于命令系统的,本身就需要输入和输出且不适合开发面向用户的应用程序(因为他们本身就是给最终用户使用的)。因此 R 语言没有专门再从控制台读取的函数,文字输入在 R 的使用中一直在进行。

R 语言中有丰富的文件读取函数,但是如果纯粹的想将某个文件中的内容读取为字符串,可以使用 readLines 函数:

readLines("/Users/runoob/runoob-test/r_test.txt")

读取结果是两个字符串,分别是所读取的文件包含的两行内容。

注意:所读取的文本文件每一行 (包括最后一行) 的结束必须有换行符,否则会报错。

除了文字的简单输入输出以外,R 还提供了很多输入数据和输出数据的方法,R 语言最方便的地方就是可以将数据结构直接保存到文件中去,而且支持保存为 CSV、Excel 表格等形式,并且支持直接地读取。这对于数学研究者来说无疑是非常方便的。但是这些功能对于 R 语言的学习影响不大,我们将在之后的章节提到。

对于文件操作,我们需要设置文件的路径,R 语言可以通过以下两个行数来获取和设置当前的工作目录:

getwd() : 获取当前工作目录
setwd() : 设置当前工作目录

注释主要用于一段代码的解析,可以让阅读者更易理解,编程语言的注释会被编译器忽略掉,且不会影响代码的执行。

一般编程语言的注释分为单行注释与多行注释,但是 R 语言只支持单行注释,注释符号为 #。

其实如果有多行注释我们只需要在每一行添加 # 号就好了。

# 这是我的第一个编程代码

数据类型
image

函数定义通常由以下几个部分组成:

函数名: 为函数指定一个唯一的名称,以便在调用时使用。
参数: 定义函数接受的输入值。参数是可选的,可以有多个。
函数体: 包含实际执行的代码块,用大括号 {} 括起来。
返回值: 指定函数的输出结果,使用关键字return。

R 语言中的函数定义使用 function 关键字,一般形式如下:

function_name <- function(arg_1, arg_2, ...) { # 函数体 # 执行的代码块 return(output) }

说明:

function_name : 为函数名
arg_1, arg_2, ... : 形式参数列表 

函数返回值使用 return()。

标签:输出,语言,runoob,笔记,学习,test,txt,函数
From: https://www.cnblogs.com/stuBoo/p/18026011

相关文章

  • Go语言精进之路读书笔记第31条——优先考虑并发设计
    31.1并发与并行1.并行方案在处理器核数充足的情况下启动多个单线程应用的实例2.并发方案重新做应用结构设计,即将应用分解成多个在基本执行单元(例如操作系统线程)中执行的、可能有一定关联关系的代码片段goroutine:由Go运行时负责调度的用户层轻量级线程,相比传统操作系统线程而......
  • K-DTree 学习笔记
    原理:沿$x$轴,$y$轴交替依次按坐标点的中位数对半分开,直到只剩下一个点为止。复杂度分析:考虑一条边只会横跨两个区间,所以沿坐标轴划分矩形数量与边界划分数量是同阶的。有$T(n)=2\timesT(\frac{n}{4})+O(1)$,单次操作复杂度是$\sqrtn$的。例题: $\mathbb{T1}\\\text......
  • 【机器学习科学库】全md文档笔记:Jupyter Notebook和Matplotlib使用(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论人工智能相关知识。主要内容包括,了解机器学习定义以及应用场景,掌握机器学习基础环境的安装和使用,掌握利用常用的科学计算库对数据进行展示、分析,学会使用jupyternotebook平台完成代码编写运行,应用Matplotlib的基本功能实现图形显示,应用Matplotlib......
  • TCL学习:First Class Tcl Objects and Relationships
    前言:最近需要移植vivado工程到新板卡上。之前只学了基础TCL语法,复杂一点的指令看博客看文档对陌生名词挠头。才发现官方文档VivadoDesignSuiteTclCommandReferenceGuide(UG835)第一章的FirstClassTclObjectsandRelationships对Vivado用到的TCL的指令做了很好的知识铺......
  • sass快速入门笔记
    本文记录了sass基本内容,包含声明、嵌套、导入、混合等使用场景将反复使用的css属性值用一个变量声明,开发过程使用这个变量,方便后期修改该值,不用全局搜索替换(降低修改风险)。变量声明用关键字$声明变量受{...}定义范围影响,在{...}内定义的在外部不可使用$highlight-......
  • MySQL学习之触发器
    介绍触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数......
  • Multi-behavior Self-supervised Learning for Recommendation论文阅读笔记
    Abstract本文提出了一个多行为自监督学习框架,以及一种自适应优化方法。具体而言,我们设计了一个行为感知的图神经网络,结合自注意力机制来捕捉行为的多样性和依赖关系。为了增强对目标行为下的数据稀疏性和辅助行为的嘈杂交互的鲁棒性,我们提出了一种新的自监督学习范式,以在行为间和......
  • 《Effective Java》阅读笔记-第九章
    EffectiveJava阅读笔记第九章通用编程第57条将局部变量的作用域最小化将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能。将局部变量的作用域最小化,最好的办法就是在第一次使用变量的地方声明它。几乎每一个局部变量都应该进行初始化。第5......
  • 《Effective Java》阅读笔记-第八章
    EffectiveJava阅读笔记第八章方法第49条检查参数的有效性基于“发生错误后应尽快检测出错误”这一通用原则,应对方法的参数进行检查。Java7中增加了Objects.requireNonNull方法,可以很方便的对参数进行null检查并抛出异常:publicvoidsomeMethod(Stringargs){ar......
  • 《Effective Java》阅读笔记-第十一章
    EffectiveJava阅读笔记第十一章并发第78条同步访问共享的可变数据多线程访问变量时,需要进行同步,否则就会产生并发问题。同步代码块、加锁等或者直接不共享变量,也就是将可变数据限制在单个线程内。ThreadLocal这种第79条避免过度同步为了避免活性失败和安全性失败......