《R for Data Science (2e)》免费中文翻译 (第2章) --- Workflow: basics

写在前面

本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github,欢迎大家参与贡献,详细信息见:
Books-zh-cn 项目介绍:
Books-zh-cn:开源免费的中文书籍社区
r4ds-zh-cn Github 地址:
https://github.com/Books-zh-cn/r4ds-zh-cn
r4ds-zh-cn 网站地址:
https://books-zh-cn.github.io/r4ds-zh-cn/


目录

  • 2.1 编程基础

  • 2.2 注释

  • 2.3 名称叫什么?

  • 2.4 调用函数

  • 2.5 练习

  • 2.6 总结

你现在已经有一些运行 R 代码的经验了。虽然我们没有给你太多细节,但显然你已经掌握了基础知识,否则你就会因为沮丧而放弃这本书了!当你开始使用 R 编程时,沮丧是很自然的,因为它对标点符号非常严格,即使一个字符放错位置也会引起错误。但是尽管你可能会感到一些挫败,要安慰自己的是,这种经历是典型的和暂时的:每个人都会经历这个阶段,克服它的唯一办法就是不断尝试。

在我们继续之前,让我们确保你在运行 R 代码方面有坚实的基础,并且了解一些最有帮助的 RStudio 功能。

2.1 编程基础

让我们回顾一些基础知识,为了尽快让您开始绘图,我们在之前省略了一些内容。您可以使用 R 进行基本的数学计算:

1 / 200 * 30
#> [1] 0.15
(59 + 73 + 2) / 3
#> [1] 44.66667
sin(pi / 2)
#> [1] 1

您可以使用赋值运算符 <- 创建新的对象:

x <- 3 * 4

请注意,变量 x 的值不会被打印出来,它只是被存储起来了。如果您想查看该值,请在控制台中输入 x

您可以使用 c() 将多个元素组合(combine)成一个向量:

primes <- c(2, 3, 5, 7, 11, 13)

对向量进行基本的算术运算会应用到向量的每个元素:

primes * 2
#> [1]  4  6 10 14 22 26
primes - 1
#> [1]  1  2  4  6 10 12

所有在 R 中创建对象的语句,也就是赋值(assignment)语句,都具有相同的形式:

object_name <- value

在阅读这段代码时,在脑海中可以说 “object name gets value”。

您将会进行很多赋值操作,而 <- 的输入可能会很麻烦。您可以使用 RStudio 的快捷键来节省时间:Alt + - (减号)。请注意,RStudio 会自动在 <- 周围添加空格,这是一个很好的代码格式化习惯。代码有时可能很难阅读,因此请给你的眼睛一些休息,并使用空格来提高可读性。

2.2 注释

R 会忽略 # 后面的任何文本。这允许您编写注释(comments),即 R 忽略但供其他人阅读的文本。我们有时会在示例中包含注释,以解释代码的运行过程。

注释可以用于简要描述以下代码的作用。

# create vector of primes
primes <- c(2, 3, 5, 7, 11, 13)# multiply primes by 2
primes * 2
#> [1]  4  6 10 14 22 26

像这样的短小代码片段,可能不需要为每一行代码都留下注释。但是当你编写的代码变得更加复杂时,注释可以节省你(和你的合作者)很多时间,帮助你理解代码的操作。

使用注释来解释代码的 why,而不是 how 或 what。代码的 what 和 how 总是可以通过仔细阅读来弄清楚,即使可能会有些繁琐。如果你在注释中描述了每个步骤,然后更改了代码,你就必须记住同时更新注释,否则当你将来返回到代码时会感到困惑。

弄清楚 why 某些事情被做是更加困难的,甚至是不可能的。例如,geom_smooth() 函数有一个名为 span 的参数,用于控制曲线的平滑程度,较大的值会产生更平滑的曲线。假设你决定将 span 的值从默认的 0.75 更改为 0.9:未来的读者很容易理解正在发生的是 what,但除非你在注释中记录你的思考过程,否则没有人会明白你 why 改变了默认值。

对于数据分析代码,使用注释来解释你的整体攻击计划,并在遇到重要发现时记录下来。从代码本身无法重新获取这些知识。

2.3 名称叫什么?

对象名称必须以字母开头,只能包含字母、数字、_.。你希望你的对象名称具有描述性,因此你需要采用一种适用于多个单词的约定。我们推荐使用蛇形命名法(snake_case),其中你用下划线(_)分隔小写单词。

i_use_snake_case
otherPeopleUseCamelCase
some.people.use.periods
And_aFew.People_RENOUNCEconvention

当我们在 Chapter 4 中讨论代码风格时,我们将再次回到命名问题。

你可以通过输入对象的名称来检查它:

x
#> [1] 12

提供另一个赋值:

this_is_a_really_long_name <- 2.5

要检查这个对象,可以尝试使用 RStudio 的自动补全功能:输入 "this",按下 TAB 键,在唯一前缀之前添加字符,然后按回车键。

假设你犯了一个错误,this_is_a_really_long_name 的值应该是 3.5,而不是 2.5。你可以使用另一个键盘快捷键来帮助你进行修正。例如,你可以按 ↑ 键来调出你最后输入的命令并进行编辑。或者,输入 “this”,然后按下 Cmd/Ctrl + ↑ 键,以列出以这些字母开头的所有命令。使用箭头键导航,然后按回车键重新输入命令。将 2.5 更改为 3.5 并重新运行。

提供另一个赋值:

r_rocks <- 2^3

让我们尝试检查它:

r_rock
#> Error: object 'r_rock' not found
R_rocks
#> Error: object 'R_rocks' not found

这说明了你和 R 之间的默契协议:R 会为你完成繁琐的计算,但作为交换,你必须在指令上完全准确。如果不准确,你可能会收到一个错误,提示找不到你要查找的对象。拼写错误是有影响的;R 无法读懂你的心思,说:“哦,他们在输入 r_rock 时可能是想表达 r_rocks。” 大小写也很重要;同样,R 无法读懂你的心思,说:“哦,他们在输入 R_rocks 时可能是想表达 r_rocks。”

2.4 调用函数

R 有一个庞大的内置函数集合,调用方式如下所示:

function_name(argument1 = value1, argument2 = value2, ...)

让我们尝试使用 seq() 函数,它可以创建序列(sequences)的数字。同时,我们也可以了解一些 RStudio 的其他有用功能。输入 se,然后按下 TAB 键。一个弹出窗口将显示可能的自动补全选项。通过输入更多字符(例如,q)来指定 seq(),以消除歧义,或者使用 ↑/↓ 箭头选择。注意弹出的浮动工具提示,提醒你函数的参数和用途。如果需要更多帮助,按下 F1 键可以在右下方的帮助选项卡中获取所有细节。

当你选择了你想要的函数后,再次按下 TAB 键。RStudio 将会为你添加匹配的左括号(()和右括号())。 输入第一个参数的名称 from,并将其设置为 1。然后,输入第二个参数的名称 to,并将其设置为 10。最后,按下回车键。

seq(from = 1, to = 10)
#>  [1]  1  2  3  4  5  6  7  8  9 10

在函数调用中,我们经常省略前几个参数的名称,因此我们可以将其重写如下:

seq(1, 10)
#>  [1]  1  2  3  4  5  6  7  8  9 10

输入以下代码,并注意 RStudio 提供了类似的帮助来配对引号:

x <- "hello world"

引号和括号必须总是成对出现。RStudio 尽力帮助你,但仍然有可能出错,导致不匹配。如果出现这种情况,R 会显示续行字符 “+”:

> x <- "hello
+

+ 符号告诉你 R 正在等待更多的输入;它认为你还没有完成。通常,这意味着你可能忘记了一个 " 或者一个 )。要么添加缺失的配对,要么按下 ESCAPE 键中断表达式,然后重试。

请注意,右上方的环境选项卡(Environment tab)显示了你创建的所有对象:

 

2.5 练习

  1. 为什么这段代码不工作?

my_variable <- 10
my_varıable
#> Error: object 'my_varıable' not found

仔细看!(这可能看起来毫无意义,但当你编程时,训练你的大脑注意到即使是微小的差异也会有所回报。)

  1. 调整以下每个 R 命令,使其能够正确运行:

libary(todyverse)ggplot(dTA = mpg) + geom_point(maping = aes(x = displ y = hwy)) +geom_smooth(method = "lm)
  1. 按下 Option + Shift + K / Alt + Shift + K。会发生什么? 如何通过菜单到达相同的位置?

  2. 让我们重新审视 Section 1.6 中的一个练习。运行以下代码行。两个图中的哪一个会保存为 mpg-plot.png?为什么?

my_bar_plot <- ggplot(mpg, aes(x = class)) +geom_bar()
my_scatter_plot <- ggplot(mpg, aes(x = cty, y = hwy)) +geom_point()
ggsave(filename = "mpg-plot.png", plot = my_bar_plot)

2.6 总结

现在你对 R 代码的工作原理有了更多了解,还学到了一些提示,可以帮助你在将来回顾代码时更好地理解它。

在下一章中,我们将继续你的数据科学之旅,教你如何使用 dplyr 这个 tidyverse 包来转换数据,无论是选择重要变量、筛选感兴趣的行,还是计算摘要统计信息。

 

--------------- 本章结束 ---------------

 

本期翻译贡献:

  • @TigerZ生信宝库

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916545.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源深度学习新宠:Burn框架助您无忧高效建模

在日新月异的人工智能世界里&#xff0c;各类深度学习框架如雨后春笋般涌现&#xff0c;而Burn&#xff0c;作为新一代的深度学习框架&#xff0c;以其不妥协的灵活性、高效性和可移植性崭露头角。本文将深入探讨Burn的核心功能、应用场景及具体使用方法&#xff0c;帮助您更好…

基于深度学习的图像分割:使用DeepLabv3实现高效分割

前言 图像分割是计算机视觉领域中的一个重要任务&#xff0c;其目标是将图像中的每个像素分配到不同的类别中。近年来&#xff0c;深度学习技术&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;在图像分割任务中取得了显著的进展。DeepLabv3是一种高效的…

如何高效合并音视频文件(时间短消耗资源少)(二)

英语字幕 1 00:00:06,480 --> 00:00:08,400 Good morning. We have a banger for you2 00:00:08,400 --> 00:00:09,840 today. We&amp;#39;re going to launch chatbt3 00:00:09,840 --> 00:00:11,519 agent. But before jumping into that, I&amp;#39;d4 00…

内网后渗透攻击过程(实验环境)--4、权限维持(2)

用途限制声明&#xff0c;本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具&#xff0c;严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果&#xff0c;作者及发布平台不承担任何责任。渗透测试涉及复杂技…

CentOS 9 配置国内 YUM 源

1.备份 sudo mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup sudo mv /etc/yum.repos.d/centos-addons.repo /etc/yum.repos.d/centos-addons.repo.backup2.创建新文件 vi /etc/yum.repos.d/centos.repo[baseos] nameCentOS Stream $releasever - BaseO…

【算法】递归、搜索与回溯算法入门

文章目录递归什么是递归为什么会用到递归如何理解递归如何写好一个递归搜索 vs 深度优先遍历 vs 深度优先搜索 vs 宽度&#xff08;广度&#xff09;优先遍历 vs 宽度&#xff08;广度&#xff09;优先搜索 vs 暴搜深度优先遍历 vs 深度优先搜索&#xff08;dfs&#xff09;宽度…

借助Aspose.HTML控件,在 Python 中将 SVG 转换为 PDF

您可能会发现许多解决方案都提供以编程方式将SVG转换为PDF 的功能。但这篇博文将介绍一个功能强大的 SDK&#xff0c;供 Python 开发人员自动化文件转换和操作。本指南将重点介绍通过 .NET 实现 Python 的 Aspose.HTML。此外&#xff0c;我们将逐步讲解相关步骤和代码片段&…

高级06-Java网络编程:从Socket到HTTP

引言&#xff1a;Java 网络编程的重要性 随着互联网技术的飞速发展&#xff0c;网络编程已成为现代软件开发中不可或缺的一部分。Java 作为一种广泛应用于企业级开发和分布式系统的编程语言&#xff0c;提供了强大的网络通信支持。从底层的 Socket 编程到高层的 HTTP 协议处理&…

STM32的蓝牙通讯(HAL库)

蓝牙基础知识&#xff08;了解即可&#xff09;&#xff1a;1.是一种利用低功率无线电&#xff0c;支持设备短距离通信的无线电技术&#xff0c;能在包括移动电话、PDAQ、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换&#xff0c;蓝牙工作在全球通用的2.4 GH…

方案B,version1

我们重新设计起步阶段的步骤,目标是:通过运行PowerShell脚本和配置GitHub Actions工作流(deploy.yml)来实现自动化部署。 要求: 用私有仓库(my-website-source-SSH)存储源码。 通过GitHub Actions自动构建(这里只是简单的Hello World,所以构建步骤可以简化为复制文件…

Linux --- 进程

一、进程概念 在 Linux 系统中&#xff0c;​​进程&#xff08;Process&#xff09;​​ 是程序执行的动态实例&#xff0c;是操作系统进行资源分配和调度的基本单位。 ​​1. 程序 vs 进程​​ ​​程序&#xff08;Program&#xff09;​​&#xff1a;是静态的代码集合&…

Cgroup 控制组学习(三)在容器中使用 CGroups

一、CGroups 关于mememory的限制操作 cgroup关于cpu操作 关于memeory cgroup的几个要点 ① memeory限额类 1、memory.limit_bytes&#xff1a;硬限制--> 限制最大内存使用量&#xff0c;单位有k、m、g三种&#xff0c;填-1则代表无限制,默认是字节2、memory.soft_limi…

SpringBoot面试基础知识

SpringBoot 是面试中后端开发岗位的高频考点&#xff0c;以下是核心考点整理&#xff1a;1. SpringBoot 基础概念- 定义&#xff1a;SpringBoot 是 Spring 框架的简化版&#xff0c;通过“自动配置”“起步依赖”等特性&#xff0c;简化 Spring 应用的搭建和开发&#xff0c;减…

Java面试全方位解析:从基础到AI的技术交锋

Java面试全方位解析&#xff1a;从基础到AI的技术交锋 面试场景&#xff1a;互联网大厂Java工程师岗位面试 面试官&#xff1a;您好&#xff0c;我是今天的面试官&#xff0c;接下来我们将进行三轮技术面试。 谢飞机&#xff1a;您好您好&#xff01;我是谢飞机&#xff0c;特别…

Web Worker:解锁浏览器多线程,提升前端性能与体验

目录 一、Web Worker 是什么&#xff1f; 核心特性 类型 二、为什么需要 Web Worker&#xff1f;(单线程的痛点) 三、Web Worker 的典型使用场景 四、一个简单的代码示例 (专用 Worker) 五、使用 Web Worker 的注意事项 六、总结 一、Web Worker 是什么&#xff1f; 简…

LabVIEW命令行调用与传参功能

该功能一方面借助 Formatinto String 构建命令行字符串&#xff0c;实现LabVIEW 环境下命令行调用 VI 并传参&#xff1b;另一方面&#xff0c;针对 Mac 平台&#xff0c;通过解析应用 Info.plist 文件&#xff0c;处理 LabVIEW 可执行文件路径&#xff0c;完善跨平台命令行调用…

使用FRP搭建内网穿透工具,自己公网服务器独享内外网端口转发

内网穿透&#xff0c;也即 NAT 穿透&#xff0c;进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。简单来说&#xff0c;就是让互联网&#xff08;外网&#xff09;设备能访问局域网&#xff08;内网&#xff09;设备提…

JavaWeb01——基础标签及样式(黑马视频笔记)

1.如何用VScode写html代码 1. 首先在vscode上安装一些插件&#xff0c;插件如下&#xff1a; 2.打开你要写入的html文件的文件夹&#xff0c;然后右击“ 新建文件”&#xff0c;命名 “xxx.html”, 3.如果是写 css文件&#xff0c;那么也是右击“新建文件”&#xff0c;命名“x…

在2G大小的文件中,找出高频top100的单词

将 2GB 的大文件分割为 2048 个大小为 512KB 的小文件&#xff0c;采用流式读取方式处理&#xff0c;避免一次性加载整个文件导致内存溢出。初始化一个长度为 2048 的哈希表数组&#xff0c;用于分别统计各个小文件中单词的出现频率。利用多线程并行处理机制遍历所有 2048 个小…

基于LNMP分布式个人云存储

1.准备工作a.关闭两台虚拟机的安全软件客户端&#xff1a;[rootmaster ~]# systemctl stop firewalld [rootmaster ~]# systemctl disable firewalld [rootmaster ~]# systemctl status firewalld ○ firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (…