教程目的:

  1. 了解什么是 R 和 R Studio
  2. 养成使用脚本的好习惯
  3. 了解如何在 R 中导入数据
  4. 了解如何操作 R 对象,如向量和数据帧
  5. 制作一个简单的情节

什么是R?

R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。它由 Ross Ihaka 和 Robert Gentleman 开发,作为“S”编程语言的开源实现。凭借庞大的在线支持社区和专用软件包,几乎可以为任何应用程序和研究领域提供额外的功能,在 R 中几乎没有什么做不到的。

R语言 和 RSTUDIO 入门_文本文件

如果你需要更有说服力的东西,为什么我们使用R而不是许多其他统计软件包之一,如MATLAB,Minitab,甚至Excel?因为:

  • R 是免费和开源的,而且永远都是!任何人都可以使用该代码并确切地了解其工作原理。
  • 由于 R 是一种编程语言而不是图形界面,因此用户可以轻松地将脚本保存为小型文本文件以供将来使用,或与协作者共享。
  • R 有一个非常活跃和乐于助人的在线社区 - 通常只需快速搜索即可找到某人已经解决了您遇到的问题。

1. 下载 R 和 RStudio

正如我们之前所说,R 本身没有图形界面,但大多数人通过提供额外功能的图形平台与 R 进行交互。

尽管R的功能十分强大,但是其作为一个命令行工具 1,在实际使用中尤为不便,因此,一款集成的开发环境十分有必要。Rstudio是一款专门针对R开发的一个集成环境,同时也支持其他多种语言,用户界面十分友好,支持代码高亮,拼写提示,作图展示等功能,因此我们推荐使用Rstudio对我们的数据进行分析。

可以从 CRAN下载 R。选择适合您的操作系统的链接。

然后,从 RStudio 网站下载 RStudio(选择免费的开源桌面版本)。

如果您使用的是 Mac,除了 R 和 RStudio 之外,您还需要下载 XQuartz(可在此处获得)。

打开 RStudio。单击“文件/新文件/R 脚本”

R语言 和 RSTUDIO 入门_sed_02

您现在将看到一个如上图所示的窗口。

请记住,如果您直接在控制台中输入代码,它不会被 R 保存。相反,通过在脚本文件中键入代码,您可以创建可重现的分析记录。在脚本中编写代码类似于在 Word 中编写文章:它保存了您的进度,您可以随时从上次中断的地方继续,或对其进行一些更改。(记得经常点击保存(Ctrl+S),这样你才能真正保存你的脚本!

RStudio 中的工作流程

在 RStudio 中工作主要有两种方式。

  1. 在交互式 R 终端控制台中测试,然后将代码复制到 .R脚本中保存并运行。
  • 这在进行小型测试和最初开始时效果很好。
  • 它很快就会变得费力。
  1. 开始写入 .R脚本 文件并使用 RStudio 的命令/快捷方式将当前行、选定行或修改后的行推送到R 终端控制台。

对于大多数应用,我们建议采用方法2。

制作一个新的.R 脚本文件,方法是单击左上角的小页面图标,然后从下拉菜单中选择 R 脚本R 脚本基本上是带有 R 命令的文本文件。

运行代码段

RStudio 为您提供了从编辑器窗口中运行代码的极大灵活性。有按钮、菜单选项和键盘快捷键。要运行当前行,您可以:

  1. 单击编辑器面板上方的Run按钮。
  2. 从“代码”菜单中选择“运行行”。
  3. 在 Windows 或 Linux 或 OS X 上点击Ctrl-EnterCommand-Enter(也可将鼠标悬停在按钮上来查看此快捷方式)。

提示:您还可以通过选择多行,然后使用 1、2 或 3 运行代码来运行多行。

有了这个,让我们开始在 R 控制台中玩吧!

使用 R 作为计算器

你可以用 R 做的最简单的事情就是做算术。尝试在控制台中键入:

*]:mt-1 [&.highlighted:last-child]:rounded-b-md [&.highlighted:last-child>*]:mb-1 [&:only-child]:hover:ring-transparent [&.highlighted]:rounded-none [&:not(.highlighted)_+_.highlighted]:rounded-t-md [&:not(.highlighted)_+_.highlighted>*]:mt-1 [&.highlighted:has(+:not(.highlighted))]:rounded-b-md [&.highlighted:has(+:not(.highlighted))>*]:mb-1 [&:not(.highlighted)_+_.highlighted:has(+:not(.highlighted))]:rounded-md" style="box-sizing: border-box; border: 0px solid rgb(229, 231, 235); --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: transparent; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; position: relative; grid-column: span 2 / span 2; display: grid; border-radius: 0.25rem; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000); grid-template-columns: subgrid;">1 + 100

现在点击ENTER.R 应返回:

*]:mt-1 [&.highlighted:last-child]:rounded-b-md [&.highlighted:last-child>*]:mb-1 [&:only-child]:hover:ring-transparent [&.highlighted]:rounded-none [&:not(.highlighted)_+_.highlighted]:rounded-t-md [&:not(.highlighted)_+_.highlighted>*]:mt-1 [&.highlighted:has(+:not(.highlighted))]:rounded-b-md [&.highlighted:has(+:not(.highlighted))>*]:mb-1 [&:not(.highlighted)_+_.highlighted:has(+:not(.highlighted))]:rounded-md" style="box-sizing: border-box; border: 0px solid rgb(229, 231, 235); --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: transparent; --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; position: relative; grid-column: span 2 / span 2; display: grid; border-radius: 0.25rem; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000); grid-template-columns: subgrid;">[1] 101

您应该看到答案,前面有“[1]”(暂时不用担心,我们稍后会解释。现在将其视为指示输出)。

如果键入不完整的命令,R 将等待您完成它。尝试输入以下内容:

> 1 -

在此阶段,R 实际上正在等待您完成命令。R 通过向您显示一个+标志而不是通常的>标志来让您知道这一点

+

每当您按回车键并且 R 会话显示 + 而不是>时,都表示它正在等待您完成命令。如果你想取消一个命令,你可以简单地点击Esc,RStudio会给你>提示。

使用 R 作为计算器时,运算顺序与你在学校学到的相同。

从最高到最低优先级:

  • 括号:()
  • 指数:或^**
  • 除法:/
  • 乘法:*
  • 加法:+
  • 减法:-

使用 R 作为花哨的计算器

使用函数和寻求帮助

R 具有许多内置的数学函数。要调用函数,我们只需键入其名称,后跟左括号和右括号。我们在括号内键入的任何内容都称为函数的参数。

以下是 R 提供的一些功能。

sin(1)  # trigonometry functions
[1] 0.841471

log(1)  # natural logarithm
[1] 0

log10(10) # base-10 logarithm
[1] 1

exp(0.5) # e^(1/2)
[1] 1.648721

变量

与其一次又一次地输入我们可能想要在计算中使用的数字,不如使用赋值运算符<-将它们的值存储在变量中,如下所示:

frequently_used_number <- 1/40

请注意,赋值不输出值。取而代之的是我们将其存储在称为变量的东西中以备后用。

frequently_used_number
[1] 0.025

更准确地说,存储值是该分数的十进制近似值,称为浮点数。

您还可以使用=

frequently_used_number = 1/40

在 RStudio 的右上窗格中查找该选项卡,您将看到该选项卡及其值已出现。在任何需要数字的计算中,我们的变量都可以用来代替数字

log(frequently_used_number)
[1] -3.688879

另请注意,变量值可更新:

frequently_used_number <- 100

frequently_used_number过去值 0.025,现在它的值为 100。

管理环境

可以使用一些有用的命令与 R 会话进行交互。

ls将列出存储在全局环境(工作 R 会话)中的所有变量和函数:

> ls()
[1] "hook_error" "hook_in"    "hook_out"   "frequently_used_number"

请注意,这里我们没有给 ls提供任何参数,但我们仍然需要给出括号来告诉 R 调用该函数。

如果我们自己打字,R 将打印出该函数的源代码!

> ls
function (name, pos = -1L, envir = as.environment(pos), all.names = FALSE,    
pattern, sorted = TRUE) 
{
    if (!missing(name)) {
        pos <- tryCatch(name, error = function(e) e)
        if (inherits(pos, "error")) {
            name <- substitute(name)
            if (!is.character(name)) 
                name <- deparse(name)
            warning(gettextf("%s converted to character string", 
                sQuote(name)), domain = NA)
            pos <- name
        }
    }
    all.names <- .Internal(ls(envir, all.names, sorted))
    if (!missing(pattern)) {
        if ((ll <- length(grep("[", pattern, fixed = TRUE))) && 
            ll != length(grep("]", pattern, fixed = TRUE))) {
            if (pattern == "[") {
                pattern <- "\\["
                warning("replaced regular expression pattern '[' by  '\\\\['")
            }
            else if (length(grep("[^\\\\]\\[<-", pattern))) {
                pattern <- sub("\\[<-", "\\\\\\[<-", pattern)
                warning("replaced '[<-' by '\\\\[<-' in regular expression pattern")
            }
        }
        grep(pattern, all.names, value = TRUE)
    }
    else all.names
}
<bytecode: 0x34ad398>
<environment: namespace:base> 

您可以使用以下方法删除不再需要的对象:rm

> rm(frequently_used_number)

如果你的环境中有很多东西,并且想要删除所有的东西,你可以将结果传递给函数,进行一次彻底清理。

> rm(list = ls())

在本例中,我们将两者结合起来。就像操作顺序一样,首先计算最内侧括号内的任何内容,依此类推。