R语言学习(持续更新中)

作者:我是天才很好
说明:本文为博主原创文章,未经博主允许不得转载,欢迎与我探讨!
邮箱:[email protected]
github地址:https://github.com/wstchhwp

第1章 概述

1.1 什么是R语言

R语言是一个开源的数据分析环境,起初是由数位统计学家建立起来,以更好的进行统计计算和绘图,这篇wiki中包含了一些基本情况的介绍。由于R可以通过安装扩展包(Packages)而得到增强,所以其功能已经远远不限于统计分析,如果感兴趣的话可以到官方网站了解关于其功能的更多信息。

至于R语言名称的由来则是根据两位主要作者的首字母(Robert Gentleman and Ross Ihaka),但过于简短的关键词也造成在搜索引擎中很不容易找到相关的资料,不过这个专门的搜索网站可以帮到你。

1.2 为什么要学习R语言

R是免费开源软件: 现在很多学术期刊都对分析软件有版权要求,而免费的分析工具可以使你在这方面不会有什么担心。另一方面,如果学术界出现一种新的数据分析方法,那么要过很长一段时间才会出现在商业软件中。但开源软件的好处就在于,很快就会有人将这种方法编写成扩展包,或者你自己就可以做这件工作。

命令行工作方式: 许多人喜欢类似SPSS菜单式的操作,这对于初学者来说很方便入门,但对于数据分析来说,命令行操作会更加的灵活,更容易进行编程和自动化处理。而且命令行操作会更容易耍酷,不是嘛,一般人看到你在狂敲一推代码后得到一个分析结果,对你投来的目光是会不一样的。

小巧而精悍: R语言的安装包更小,大约不到40M,相比其它几个大家伙它算是非常小巧精悍了。目前R语言非常受到专业人士欢迎,根据对数据挖掘大赛胜出者的调查可以发现,他们用的工具基本上都是R语言。此外,从最近几次R语言大会上可以了解到,咨询业、金融业、医药业都在大量的使用R语言,包括google/facebook的大公司都在用它。因此,学习R语言对你的职业发展一定是有帮助的。

1.3 R语言的下载和GUI界面

R语言软件下载:

http://mirrors.ustc.edu.cn/CRAN/

R语言开发IDE

http://download1.rstudio.org/RStudio-0.98.1028.exe

此外,学习R语言时强烈推荐安装Rstudio做为R的图形界面,关于Rstudio之前的博文有过简单介绍,点这里可能转到它的官方网站。

1.4 R语言的学习方法

学习R并不是一件非常轻松的事情,初学者需要记住的就是:

  • 亲手键入代码并理解其意义
  • 在笔记里记下一些重点或心得(个人推荐Evernote)
  • 坚持练习,对手边的数据进行应用分析
  • 理解背景知识,细节很重要。

1.5 贴心小提醒

分号的含义: 语句结束的意思。

第2章 创建数据集

2.1 数据类型

R可以处理的数据类型(模式)包括数值型、字符型、逻辑型( TRUE/FALSE)、复数型(虚数)和原生型(字节)

R中对象的5种基本类型

  • 字符
  • 整数 (integer)
  • 复数(complex)
  • 逻辑(logical:True/False)
  • 数值(numeric:real numbers)

查看对象类型的命令:class(x)

2.2 数据结构

  • 对象(object) 是指可以赋值给变量的任何事物,包括常量、数据结构、函数,甚至图形。对象都拥有某种模式,描述了此对象是如何存储的,以及某个类,像print这样的泛型函数表明如何处理此对象。

  • 数据框(data frame) 是R中用于存储数据的一种结构:列表示变量,行表示观测。在同一个数据框中可以存储不同类型(如数值型、字符型)的变量。数据框将是你用来存储数据集的主要数据结构。

  • 因子(factor) 是名义型变量或有序型变量。它们在R中被特殊地存储和处理。

2.2.1 向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组。

执行组合功能的函数c() 可用来创建向量。

a <- c(1, 2, 5, 3, 6, -2, 4) 
b <- c("one", "two", "three") 
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

# 标量是只含一个元素的向量
f <- 3
g <- "US"
h <- TRUE

# 同一向量中无法混杂不同模式的数据

2.2.2 矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。

可通过函数matrix()创建矩阵。

myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value, dimnames=list( char_vector_rownames,char_vector_colnames))

#其中vector包含了矩阵的元素, nrow和ncol用以指定行和列的维数, dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充( byrow=FALSE),默认情况下按列填充。

我们可以使用下标和方括号来选择矩阵中的行、列或元素。

X[i,]指矩阵 X中的第i行
X[,j]指第j列
X[i, j]指第i行第j个元素
选择多行或多列时,下标 i和j可为数值型向量

2.2.3 数组

数组(array)与矩阵类似,但是维度可以大于2。
数组可通过array函数创建。

myarray <- array(vector, dimensions, dimnames) 

#其中vector包含了数组中的数据, dimensions是一个数值型向量,给出了各个维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。

2.2.4 数据框

由于不同的列可以包含不同模式(数值型、字符型等)的数据,数据框的概念较矩阵来说更为一般。

data.frame()

mydata <- data.frame(col1, col2, col3,...) 

其中的列向量 col1、col2、col3等可为任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names指定。

选取数据框中元素的方式有若干种。你可以使用前述(如矩阵中的)下标记号,亦可直接指定列名。

> patientdata[1:2] 
  patientID age 
1    1      25  
2    2      34  
3    3      28 
4    4      52

> patientdata[c("diabetes", "status")]
  diabetes status 
1  Type1    Poor 
2  Type2  Improved 
3  Type1  Excellent 
4  Type1    Poor 

> patientdata$age
[1] 25 34 28 52
(1) attach()、detach()
attach(mtcars) 
summary(mpg) 
plot(mpg, disp) plot(mpg, wt)
detach(mtcars)

# 函数attach()可将数据框添加到R的搜索路径中。
# 函数detach()将数据框从搜索路径中移除。
# detach()并不会对数据框本身做任何处理。

当名称相同的对象不止一个时,这种方法的局限性就很明显了。

> mpg <- c(25, 36, 47) 
> attach(mtcars) 
The following object(s) are masked _by_'.GlobalEnv': 
mpg 
> plot(mpg, wt) 
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ 
> mpg 
[1] 25 36 47

#这里,在数据框mtcars被绑定(attach)之前,你们的环境中已经有了一个名为mpg的对象。在这种情况下,原始对象将取得优先权,这与你们想要的结果有所出入。由于mpg中有3个元素而disp中有32个元素,故plot语句出错。
(2) with()
with(mtcars, {
   print(summary(mpg)) 
   plot(mpg, disp) 
   plot(mpg, wt)
})
# 在这种情况下,花括号 {}之间的语句都针对数据框 mtcars执行,这样就无需担心名称冲突了。如果仅有一条语句(例如summary(mpg)),那么花括号 {}可以省略。

函数with()的局限性在于,赋值仅在此函数的括号内生效。如果你需要创建在 with()结构以外存在的对象,使用特殊赋值符(<<-)替代标准赋值符(<-)即可,它可将对象保存到 with()之外的全局环境中。

(3) 实例标识符

在病例数据中,病人编号(patientID)用于区分数据集中不同的个体。在R中,实例标识符(case identifier)可通过数据框操作函数中的rowname选项指定。

patientdata <- data.frame(patientID, age, diabetes, status, row.names=patientID) 

2.2.5 因子

  1. 变量可归结为名义型、有序型或连续型变量。名义型变量是没有顺序之分的类别。
  2. 类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)
  3. 函数factor()以一个整数向量的形式存储类别值,整数的取值范围是 [1…k](其中k是名义型变量中唯一值的个数),同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。
  4. 要表示有序型变量,需要为函数 factor()指定参数ordered=TRUE。
diabetes <- c("Type1", "Type2", "Type1", "Type1") 

# 语句diabetes <- factor(diabetes)将此向量存储为 (1, 2, 1, 1),并在内部将其关联为 1=Type1和2=Type2(具体赋值根据字母顺序而定)。
status <- c("Poor", "Improved", "Excellent", "Poor") 
status <- factor(status, ordered=TRUE)

# 会将向量编码为 (3, 2, 1, 3),并在内部将这些值关联为 1=Excellent、2=Improved以及3=Poor。
# 对于字符型向量,因子的水平默认依字母顺序创建。通过指定levels选项来覆盖默认排序。
status <- factor(status, order=TRUE, levels=c("Poor", "Improved", "Excellent")) 

# 数值型变量可以用levels和labels参数来编码成因子。如果男性被编码成1,女性被编码成2,则以下语句: 
sex <- factor(sex, levels=c(1, 2), labels=c("Male", "Female")) 

2.2.6 列表

列表就是一些对象(或成分, component)的有序集合,列表允许你整合若干(可能无关的)对象到单个对象名下。某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。

mylist <- list(object1, object2, ...)
mylist <- list(name1=object1, name2=object2, ...)

# 可以通过在双重方括号中指明代表某个成分的数字或名称来访问列表中的元素。

第3章 程序控制结构

程序控制结构是应用if条件语句、循环语句等控制程序的走向,程序控制结构又称为流程控制。

条件语句包括if,switch语句,可用复合表达式而且可用if-else,switch语句根据条件表达式的值,选择执行的语句组。

循环语句有for、while、repeat语句,并且可用组合break和next语句的方法。

常见控制结构的命令:

if and else: 测试逻辑条件
for: 用于执行固定次数的循环
while: 用于在某个条件成立时执行循环
repeat: 执行无限循环
break: 终止并跳出循环
next: 跳过循环中的当前迭代
return: 从函数中退出

3.1 顺序语句

3.2 条件语句

3.2.1 if-else

如果条件成立,程序就做某件事,否则(另一种条件下),程序做另一件事。

if(<condition>) {
        ## do something
} 
else {
        ## do something else
}

else不是必须的,如果只需要在某条件成立时执行某个任务,那么只要使用if语句就可以了。

if(<condition>) {
        ## do something
} 
## Continue with rest of code

如果条件不止一个/不止两个的时候,可以添加一个/多个 else if语句,但最后必须以else结尾:

if(<condition1>) {
        ## do something
} else if(<condition2>)  {
        ## do something different
} else {
        ## do something different
}

3.2.2 switch分支语句

在R语言中,switch()函数是多分支结构,其使用方法如下:

switch(expr, list)
  • expr为表达式,其值或为一个整数值或为一个字符串。

  • list为一个列表。

其运行机理为:如果expr的计算结果为整数,且值在1~length(list)之间时,则switch()函数返回列表相应位置的值。如果expr的值超出范围,则没有返回值(老版本的R中返回NULL)

##switch分支语句
switch(1,mean(1:10),rnorm(4))  #执行mean(1:10)
switch(2,mean(1:10),rnorm(4))  #执行rnorm(4)
#由switch(x)来选择执行那个函数

3.3 循环语句

3.3.1 for 循环(for loop)

for循环是R中最常见的循环运算符,基本思路是先要设定一个循环下标,通常命名为i,循环下标通常会代表一个整数数列中的每一个数字,或列表中的每一个对象等等。

  • 第一种方法是将循环向量和向量x的长度相对应:

    x <- c("a", "b", "c", "d")
    for (i in 1:4) {
      print(x[i])
    }
    
  • 第二个方法,使用seq_along()函数,即,输入一个向量,之后它就会创造一个与该向量等长的整数数列。因此上面的例子可以改写成,在我们不知道x的向量长度时,可以使用这种写法:

    x <- c("a", "b", "c", "d")
    for (i in seq_along(x)) {
      print(x[i])
    }
    
  • 第三个方法,下标变量letter,这个变量的本意就是一个下标,会从向量本身取值,它可以从任意向量中提取元素,因此可以写成:

    }
    

    ps. 如果你的for循环表达式只有一行,那么可以省略掉大括号{},直接写道for的后面:

    for (letters in x) print(letters)
    

3.3.2 嵌套for循环(Nested for loop)

把一个for循环放到另一个for循环的里面。

比如,有一个二维矩阵,你想先做一个行循环,再做一个列循环,这时就需要做一个嵌套for结构才能打印出所有矩阵中的元素,将设置i为外层循环下标,j为内层循环下标。

> x <- matrix(1:6, 2, 3)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> for (i in seq_len(nrow(x))) {
+ for (j in seq_len(ncol(x))) {
+ print(x[i,j])  
+ }  
+ }
[1] 1
[1] 3
[1] 5
[1] 2
[1] 4
[1] 6

3.3.3 while 循环

While循环有一个逻辑表达式,循环是按照这个逻辑表达式的值来反复运行的。

**例一:**设定一个计数标量count,初始值为0,当技术变量的值小于10(逻辑表达式)时,运行输出变量count就在之前的基础上+1,一旦count的值达到10,循环停止。

count <- 0
while(count < 10) {
         print(count)
  count <- count + 1
}

注意: 你需要确保逻辑循环表达式的值是可以达到终止状态的,否则就会无穷无尽的循环下去。

例二:设计一个小型随机游走的程序

首先赋值z=5,然后运行while循环,当z处于3~10中间时,进入循环,循环中抛硬币,硬币是随机数1和0.5,在嵌入if循环,z的值会根据硬币取值变化而变化,结束时间不定。

z <- 5
while (z >= 3 && z <= 10) {
  coin <- rbinom(1, 1, 0.5)
  if(coin == 1) {  ## random walk
    z <- z + 1
    } else {
    z <- z - 1
    }
}

3.3.4 repeat循环

这是一个无限循环结构,退出的方法是break(在某个点强制退出)。

比如,当你想计算两个值何时达到无限接近,需要通过算法不断循环,直到逼近你设置的容差(允许范围).

x0 <- 1
tol <- 1e-8

repeat {
  x1 <- computeEstimate()

  if(abs(x1 - x0) < tol) {  ## Close enough?
    break
  } else {
    x0 <- x1
  } 
}

(这里的computeEstimate()是需要事先设定的,如果没有这段这个代码的话跑不通)

注意, repeat循环风险很大,因为没硬性规定何时退出,有可能运行时间非常长,所以不建议直接使用

3.3.5 break函数

break用来完全退出循环

for(i in 1:100) {
      print(i)

      if(i > 20) {
              ## Stop loop after 20 iterations
              break  
      }     
}

3.3.6 next和return函数

nextreturn函数是一种控制结构。

next可用在任何一种循环中,跳过某一段循环。

例如,在1-100的迭代循环中,想要跳过前20个,可以用这种方式:

for(i in 1:100) {
        if(i <= 20) {
                ## Skip the first 20 iterations
                next                 
        }
        ## Do something here
}

return主要用于退出函数,它会结束整个函数并且返回一个数值。

第4章 函数

函数是一组组合在一起以执行特定任务的语句, R语言具有大量内置函数,用户可以创建自己的函数。

在R语言中,函数是一个对象,因此R语言解释器能够将控制传递给函数,以及函数完成动作所需的参数,该函数依次执行其任务并将控制返回到解释器以及可以存储在其他对象中的任何结果。

4.1 函数定义

使用关键字函数创建R语言的函数, R语言的函数定义的基本语法如下:

function_name <- function(arg_1, arg_2, ...) {
   Function body 
}

4.2 函数组件

函数的不同部分 :

  • 函数名称 --这是函数的实际名称,它作为具有此名称的对象存储在R环境中。
  • 参数 --参数是一个占位符。 当函数被调用时,需要传递一个值到参数。 参数是可选的, 也就是说,一个函数可能不包含参数,参数也可以有默认值。
  • 函数体 --函数体包含定义函数的功能的语句集合。
  • 返回值 --函数的返回值是要评估的函数体中的最后一个表达式。

R语言有许多内置函数,可以在程序中直接调用而无需先定义它们。此外,我们还可以创建和使用自己的函数,称为用户定义的函数

4.4.1 内置功能

内置函数的简单示例是seq(),mean(),max(),sum(x)和paste(…)等,它们由用户编写的程序直接调用,可以参考最广泛使用的R函数。

# 创建一个序列(32,44)
print(seq(32,44))
# 均值
print(mean(25:82))
# 求和
print(sum(41:68))

当我们执行上面的代码,它产生以下结果 :

[1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526
4.4.2 用户定义的函数

我们可以在R语言中创建用户定义的函数。它们特定于用户想要的,一旦创建,它们就可以像内置函数一样使用。 下面是一个创建和使用函数的例子。

# 创建一个函数:打印出序列中数字的平方
new.function <- function(a) {
   for(i in 1:a) {
      b <- i^2
      print(b)
   }
} 

# 调用函数
new.function(6)

当我们执行上面的代码,它产生以下结果 :

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36
4.4.3 调用没有参数的函数
new.function <- function() {
   for(i in 1:5) {
      print(i^2)
   }
}   

new.function()

当我们执行上面的代码,它产生以下结果 :

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
4.4.4 使用参数值调用函数(按位置和名称)

函数调用的参数可以按照函数中定义的顺序提供,也可以以不同的顺序提供,但分配给参数的名称。

new.function <- function(a,b,c) {
   result <- a * b + c
   print(result)
}

new.function(5,3,11)
new.function(a = 11, b = 5, c = 3)

当我们执行上面的代码,它产生以下结果 :

[1] 26
[1] 58
4.4.5 使用默认参数调用函数

我们可以在函数定义中定义参数的值,并调用函数而不提供任何参数以获取默认结果,但是我们也可以通过提供参数的新值来获得非默认结果来调用这样的函数。

new.function <- function(a = 3, b = 6) {
   result <- a * b
   print(result)
}

new.function()
new.function(9,5)

当我们执行上面的代码,它产生以下结果 :

[1] 18
[1] 45
4.4.6 功能的延迟计算

对函数的参数进行延迟评估,这意味着它们只有在函数体需要时才进行评估。

new.function <- function(a, b) {
   print(a^2)
   print(a)
   print(b)
}

new.function(6)

当我们执行上面的代码,它产生以下结果 :

[1] 36
[1] 6
Error in print(b) : argument "b" is missing, with no default
4.4.7 一些对数据结构操作的重要函数
  • 向量操作的函数
z是一个向量
sum(z)               #求和
mean(z)              #求平均值
sd(z)                #计算方差
median(z)            #求中位数
sort(z)              #按从小到大排序append(z,2:3,after) 添加元素
append(z,2:3,after=2)  #在向量z后面的第2个位置后面添加2和3
矩阵操作的函数
A,B,C是矩阵
  • 矩阵操作的函数
A,B,C是矩阵
t(A)                # 得到矩阵A的转置矩阵
dim(A)              #求矩阵A的行数和列数
nrow(A)             #求矩阵的行数
ncol(A)             #求矩阵的列数
rbind(B,C)          #按行合并矩阵
cbind(B,C)          #按列合并矩阵
  • 分组函数
    1) apply函数

    对一个数组按行或者按列进行计算
    apply(xy,1,sum)  # 对矩阵xy按行求和
    apply(xy,2,mean)  # 对矩阵xy按列求平均数
    使用格式为:
    apply(X, MARGIN, FUN, …)
    其中X为一个数组;MARGIN为一个向量(表示要将函数FUN应用到X的行还是列),若为1表示取行,为2表示取列,为c(1,2)表示行、列都计算。
    
    x <- runif(10,-1,1);x # 生成均匀分布随机数,第一个参数n为个数,第二个参数min为下限,第三个max为上限
    y <- rnorm(10,0.5,1);y  # 生成正态分布随机数,第一个参数n为个数,第二个mean=0为正态分布均值,sd=1位正态分布的标准差
    xy <- cbind(x,y);xy # 根据列进行合并
    apply(xy,1,sum)  # 对xy按行进行求和运算
    apply(xy,2,mean) # 对xy进行按列求平均值
    

    2)tapply函数

    进行分组统计
    
    tapply(X, INDEX, FUN = NULL, …, simplify = TRUE)
    其中X通常是一向量;INDEX是一个list对象,且该list中的每一个元素都是与X有同样长度的因子;FUN是需要计算的函数;simplify是逻辑变量,若取值为TRUE(默认值),且函数FUN的计算结果总是为一个标量值,那么函数tapply返回一个数组;若取值为FALSE,则函数tapply的返回值为一个list对象。需要注意的是,当第二个参数INDEX不是因子时,函数 tapply() 同样有效,因为必要时 R 会用 as.factor()把参数强制转换成因子。
    
    t1 <- factor(rep(1:4,length=14),levels=1:5,labels=c("A","B","C","D","E"));t1
    t2 <- c(1:14) ;t2
    tapply(t2,t1,sum)        #按照t1的标签对t2进行分组求和,返回值为标量值
    tapply(t2,t1,sum,simplify=FALSE)  #按照t1的标签对t2进行分组求和,并且返回值为list对象
    

    3) lapply函数

    lapply()对列表对象调用函数进行计算
    
    lapply(X, FUN, …)
    lapply的返回值是和一个和X有相同的长度的list对象,这个list对象中的每个元素是将函数FUN应用到X的每一个元素。其中X为List对象(该list的每个元素都是一个向量),其他类型的对象会被R通过函数as.list()自动转换为list类型。
    
    L1 <- list(a=1:20,b=runif(30,-2,5),d=matrix(c(1:10))) #创建一个列表
    lapply(L1,quantile)  #对列表对象L1求四分位数
    

    quantile 求四分位数
    四分位数为对一个列表排序后的 %0,%25,%50,%75,100% 位置上的数

    4) sapply函数

    函数sapply是函数lapply的一个特殊情形,对一些参数的值进行了一些限定,其使用格式为:
    sapply(X, FUN,…, simplify = TRUE, USE.NAMES = TRUE)
    sapply(, simplify = FALSE, USE.NAMES = FALSE) 和lapply()的返回值是相同的。如果参数simplify=TRUE,则函数sapply的返回值不是一个list,而是一个矩阵;若simplify=FALSE,则函数sapply的返回值仍然是一个list。
    
    sapply(L1,quantile,simplify=FALSE,use.names=FALSE)  #对L1求四分位数,返回结果为列表
    sapply(L1,quantile,simplify=TRUE,use.names=FALSE)   #对L1求四分位数,返回结果为矩阵
    
4.4.8 常用函数总结大全

把R常用函数大体汇总了一下,其中包括一般数学函数统计函数概率函数字符处理函数,以及一些其他函数

  • 数学函数

[外链图片转存失败(img-L5Gjkz2t-1567665509742)(E:\CQUPT\AI\学习笔记\picture\数学函数.png)]

  • 统计函数

    [外链图片转存失败(img-OCKYcMuI-1567665509743)(E:\CQUPT\AI\学习笔记\picture\统计函数.png)]

  • 概率函数

    [外链图片转存失败(img-UE7Xe7Jz-1567665509744)(E:\CQUPT\AI\学习笔记\picture\概率函数.png)]

在R中,函数函数行如:[x][function],其中x表示指分布的某一方面,function表示分布名称的缩写。

d->密度函数(density)

p->分布函数(distribution function)

q->分位数函数(quantile function)

r->生成随机数函数
  • 字符处理函数

    [外链图片转存失败(img-lQ3iNg5y-1567665509746)(E:\CQUPT\AI\学习笔记\picture\字符处理函数.png)]

  • 其他实用函数

    [外链图片转存失败(img-fDqDKswS-1567665509748)(E:\CQUPT\AI\学习笔记\picture\其他实用函数.png)]

附录

1.Rstudio使用方法

1.1 界面概况

img

  • Source:(左上角1区)
  • Console:(左下角2区)
  • Environment, History, Connections:(右上角3区)
  • Files, Plots, Packages, Help, Viewer:(右下角4区)

Source区:这个区域主要负责代码的撰写。

刚启动时,可能会看不到这个区。可点击左上角的【File】→【New File】→【R Script】将Source区打开,如下图。

img

上面步骤将新建一个名为“Untitled1”的R代码文件(后缀名默认为.R)。你可在文件内撰写代码,然后可按快捷键Ctrl + S(或点击下图红圈里面的按钮)保存文件。

img

接着会跳出“Save File”弹出框,然后可将“Untitled1”文件重命名。这里重命名为“test”,然后点“Save”保存文件。文件将保存在当前工作目录下。

img

在4区的“Files”下,你将看到我们刚保存的test.R文件。

Console区:这里是执行代码的地方,执行结果也会显示在这里。

你可在这个区域直接输入代码,然后按回车键输出结果。

小技巧:想要清除Console上的内容,可按Ctrl + L快捷键或者在Console输入cat('\f')。

你也可通过Source区执行代码,拿刚才保存下的test.R文件来举例:将光标放在第一行,点Run键将执行这行代码,然后光标自动会跳至第二行;重复上面步骤,你将逐行执行文件中的代码。

注意:光标不要求在行前或行末,可放在一行中的任意位置。

如果你想执行整个文件中的代码,可以点Source键执行。

Environment, History, Connections区

Environment:是用来记录当前变量的数值,方便查看当前变量的状况,如下图。

img

History:是所有在 Console区内代码执行的历史记录,如下图。

img

**Connections:**是用来方便连接外部数据库,用得非常少。

Files, Plots, Packages, Help, Viewer区

**Files:**这里会显示当前工作目录下的文件,让使用者了解所在的工作目录,这对读写文件非常重要。

如下图,当前的工作目录是默认工作目录,也显示了目录下所有文件。

img

你可通过在Console输入getwd()函数来获取当前工作目录路径。

**Plots:**画好的图将在这里显示。

img

**Packages:**显示已经安装好了的包,打勾代表已经加载。

安装Package点击Install,然后输入包名;

也可在Console中输入相应代码来安装包,比如install.packages(‘data.table’)将安装“data.table”这个包。

更新包点Update。

Help:查询函数如何使用,下图是查询求和函数sum

img

也可在Console中輸入help()函数,()内输入所要查询的函数。比如:help(mean)。或者直接在Console输入?mean,如下图。

img

Viewer:是用来显示本地网页文件,用得比较少。

1.2 改下主题为黑色

[外链图片转存失败(img-riqy00nJ-1567665509771)(E:\CQUPT\AI\学习笔记\picture\修改主题为黑色.png)]

1.3 修改镜像源,免得警告总是出来

[外链图片转存失败(img-Kw3lplVk-1567665509772)(E:\CQUPT\AI\学习笔记\picture\rstudio.png)]

1.4 切换不同R版本

R允许多个版本共存,比如我在电脑上同时安装了3个版本(如下图)。通过RStudio可以很方便在各个R版本间进行切换。

img

点击【Tools】→【Global Options…】

接着点【General】→【Change…】→【Choose a specific version of R】→选中切换的R版本→【OK】→【OK】;下次启动RStudio后,R将切换到相应版本。

img

1.5 包安装镜像切换

由于网速慢的原因,有时安装包会安装失败。

此时可以通过将包安装切换至中国镜像来解决:点【Tools】→【Global Options…】,接着点【Packages】→【Change…】→【选中一个中国镜像】→【OK】→【OK】。如下图,以后安装包都会通过这个镜像。

img

参考链接:

https://www.cnblogs.com/wentingtu/archive/2012/03/03/2377969.html

https://blog.csdn.net/qy_microbiota/article/details/79601852

https://blog.csdn.net/weixin_30840253/article/details/99110595

https://blog.csdn.net/ronghuilin/article/details/54095031

https://blog.csdn.net/qq_38131668/article/details/79775453

https://blog.csdn.net/wzgl__wh/article/details/61499027

https://blog.csdn.net/weixin_42261607/article/details/82846528

注:本博客整合了许多网友的博客资料,仅在于学习交流使用,若有侵权,请联系我删除。

发布了113 篇原创文章 · 获赞 57 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43593330/article/details/100557859