当前位置: 首页 > news >正文

R 语言学习教程,从入门到精通,R的安装与环境的配置(3)

1、R 基础语法

一门新的语言学习一般是从输出 “Hello, World!” 程序开始,R 语言的 “Hello, World!” 程序代码如下:

myString <- "Hello, World!"
print ( myString )

以上示例将字符串 “Hello, World!” 赋值给 myString 变量,然后使用 print() 函数输出。
注意:R 语言赋值使用的是左箭头 <- 符号,不过一些新版本也支持等号 =。

1.1、变量

R 语言的有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成。
变量名称以字母或点开头。
在这里插入图片描述

1.2、变量赋值

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

# 使用等号 = 号赋值
> var.1 = c(0,1,2,3)           
> print(var.1)
[1] 0 1 2 3
# 使用左箭头 <-赋值
> var.2 <- c("learn","R")   
> print(var.2)
[1] "learn" "R"
# 使用右箭头 <- 赋值
> c(TRUE,1) -> var.3
> print(var.3)
[1] 1 1

查看已定义的变量可以使用 ls() 函数:

> print(ls())
[1] "var.1" "var.2" "var.3"

删除变量可以使用 rm() 函数:

> rm(var.3)
> print(ls())
[1] "var.1" "var.2"
>

上一章节中我们已经学会来如何安装 R 的编程环境,接下来我们将为大家介绍 R 语言的交互式编程与文件脚本编程。

1.3、交互式编程

我们只需要在命令行中执行 R 命令就可以进入交互式的编程窗口:

R

执行完这个命令后会调出 R 语言的解释器,我们在 > 符后面输入代码即可。
交互式命令可以通过输入 q() 来退出:

> q()
Save workspace image? [y/n/c]: y

1.4、文件脚本

R 语言文件后缀为 .R。
接下来我们创建一个 nhooo-test.R 文件:代码如下:
nhooo-test.R 文件
myString <- “nhooo”
print ( myString )
接下来我们在命令行窗口使用 Rscript 来执行该脚本:

Rscript nhooo-test.R

输出结果如下:

[1] "nhooo"

1.4、输入输出

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

print("nhooo")
print(123)
print(3e2)

执行结果:

[1] "nhooo"
[1] 123
[1] 300
R 语言与 node.js 和 Python 一样,是解释型的语言,所以我们往往可以像使用命令行一样使用 R 语言。
如果我们在一行上进输入一个值,那么 R 也会把它直接标准化输出:
> 5e-2
[1] 0.05

1.5、cat() 函数

如果需要输出结果的拼接,我们可以使用 cat() 函数:

> cat(1, "加", 1, "等于", 2, '\n')
11 等于 2

cat() 函数会在每两个拼接元素之间自动加上空格。

1.6、输出内容到文件

R 语言输出到文件的方法十分多样,而且很方便。
cat() 函数支持直接输出结果到文件:

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

这个语句不会在控制台产生结果,而是把 “nhooo” 输出到 “/Users/nhooo/nhooo-test/r_test.txt” 文件中去。
file 参数可以是绝对路径或相对路径,建议使用绝对路径,Windows 路径格式为 D:\r_test.txt。

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

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

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

执行以上代码后,打开 r_test.txt 文件内容如下:

nhoooGOOGLE

1.7、sink()

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

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

这条语句执行以后,任何控制台上的输出都会被写入到 “/Users/nhooo/nhooo-test/r_test.txt” 文件中去,控制台将不会显示输出。
注意:这个操作也是"覆盖写入"操作,会直接清除原有的文件内容。
如果我们依然像保留控制台的输出,可以设置 split 属性:

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

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

sink()
sink("r_test.txt", split=TRUE)  # 控制台同样输出
for (i in 1:5) print(i)
sink()   # 取消输出到文件sink("r_test.txt", append=TRUE) # 控制台不输出,追加写入文件
print("nhooo")

执行以上代码,当前目录下会生存一个 r_test.txt 文件,打开文件内容如下:

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] "nhooo"

控制台输出为:

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

1.8、文字输入

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

1.9、从文件读入文字

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

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

执行结果:

[1] "nhoooGOOGLE"

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

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

1.10、其他方式

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

1.11、工作目录

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

# 当前工作目录
print(getwd())# 设置当前工作目录
setwd("/Users/nhooo/nhooo-test2")# 查看当前工作目录
print(getwd())

执行以上代码输出结果为:

[1] "/Users/nhooo/nhooo-test"
[1] "/Users/tianqixin/nhooo-test2"

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 信号相关函数
  • Python | Leetcode Python题解之第318题最大单词长度乘积
  • 药店管理小程序的设计
  • 半导体芯闻--20240804
  • c++ malloc 过大或者0
  • ESP32人脸识别开发- 基础介绍(一)
  • MySQL-InnoDB引擎
  • 图论① dfs | Java | LeetCode 797,Kama 98 邻接表实现(未完成)
  • 自动气象站:高度自动化、智能化和精准化
  • Ubuntu配置Ngbatis学习环境
  • C++适配器
  • golang国内proxy设置
  • 【每日一题】【枚举】【估计时间复杂度】[蓝桥杯 2024 省 B] 好数 C++
  • 【Python 逆向滑块】(实战五)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信
  • Java 设计模式之单例模式
  • 【刷算法】求1+2+3+...+n
  • Brief introduction of how to 'Call, Apply and Bind'
  • canvas 绘制双线技巧
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • iOS编译提示和导航提示
  • java正则表式的使用
  • Map集合、散列表、红黑树介绍
  • nodejs:开发并发布一个nodejs包
  • PAT A1092
  • Quartz初级教程
  • TypeScript实现数据结构(一)栈,队列,链表
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 前端
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前嗅ForeSpider教程:创建模板
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 深度学习入门:10门免费线上课程推荐
  • 深入浏览器事件循环的本质
  • 收藏好这篇,别再只说“数据劫持”了
  • 手写一个CommonJS打包工具(一)
  • 我与Jetbrains的这些年
  • 责任链模式的两种实现
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # 数据结构
  • #Linux(Source Insight安装及工程建立)
  • $(selector).each()和$.each()的区别
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (a /b)*c的值
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)u-boot-nand.bin的下载
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .net core 外观者设计模式 实现,多种支付选择