R语言入门难、学不会?这本R语言编程指南解救你

2023-11-01 13:40

本文主要是介绍R语言入门难、学不会?这本R语言编程指南解救你,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

新书速递

 

导读:尽管R语言有很多令人沮丧的奇怪之处,但是R从本质上来说是一款十分适合数据科学的优雅而美丽的语言。

1

为什么选择R语言

如果刚刚接触R语言,你可能会问这门奇怪的语言有什么值得学习的。对于我来说,R语言最好的特性有下面几条:

 

  • R语言是免费、开源、跨平台的。所以如果使用R语言进行数据分析,每个人都可以很容易地复制它(重现分析过程),无论他们生活在哪里或赚多少钱。

  • R语言拥有一个多元化且热情的社区既有在线社区(例如#rstats twitter社区,https://twitter.com/search?q=%23rstats),也有面对面社区(例如许多R语言用户的聚会,https://www.meetup.com/topics/r-programming-language/)。有两个特别鼓舞人心的社区团体:rweekly时事通讯(https://rweekly.org),可以方便地获取R最新的消息;R-Ladies(http://r-ladies.org),为妇女和其他少数族裔性别提供了一个非常受欢迎的社区。

  • 大量可以用于统计建模、机器学习、可视化、数据导入与操作的添加包(package)可以供R使用。可能别人都已经做好了你正在尝试构建的任何模型或者图形,即使不能完全照搬,你也能从他们的工作中学到很多经验,从而对你的工作起到帮助作用。

  • 交流结果的强大工具。RMarkdown(https://rmarkdown.rstudio.com)可以非常容易地将结果输出成HTML、PDF、Word、PowerPoint演示文稿、dashboard等报告。Shiny(http://shiny.rstudio.com)可以帮你制作精美的交互式应用程序,而无须任何HTML或JavaScript知识。

  • RStudio是一种集成开发环境(http://www.rstudio.com/ide/),专门针对数据科学、交互式数据分析和统计编程的需求而设计。

  • 前沿的工具。统计学和机器学习领域的研究者在发表研究论文时,经常会同时发布一个相应的R添加包。这就意味着你可以马上获得最新的统计技术并可以迅速实施。

  • 对数据分析根深蒂固的支持。这包括很多特性,比如缺失值、数据框和向量化等。

  • 强大的函数式编程基础。函数式编程的思想非常适合应对数据科学的挑战。R语言是函数式编程,并且提供了有效函数式编程所需的许多原语。

  • RStudio公司(https://www.rstudio.com)通过向R用户团队销售专业产品来盈利,然后转身将其中的大部分资金投资到开源社区(RStudio有超过50%的软件工程师从事开源项目)。我之所以为RStudio工作,是因为我从根本上相信它的使命。

  • 强大的元编程(metaprogramming)工具。R语言的元编程功能可以让你写出简洁而神奇的函数,并为设计特定领域的语言(domain-specific language)(例如ggplot2、dplyr、data.table等)提供了出色的环境。

  • 可以与高性能编程语言(如C、Fortran和C++)连接。

 

当然R语言也不是完美的。R语言最大的挑战和机遇就是大多数用户都不是程序员。这就意味着:

  • 所看到的很多R代码都是在急于解决某个紧迫问题的情况下编写的。因此这些代码并不是非常简洁、高效或者易于理解。大多数用户不会修改他们的代码来克服这些缺点。

  • 与其他编程语言相比,R社区更注重结果而非过程。软件工程最佳实践的知识不够完整。例如,使用源代码控制或自动化测试的R程序员还不够多。

  • 元编程是一把双刃剑。有太多的R函数通过使用一些技巧来减少代码的输入量,由此造成的结果就是使代码变得很难理解,有些还会以意想不到的方式失败。

  • 不同作者贡献的各种R添加包之间经常会出现矛盾,甚至与R的基础包发生冲突。每次使用R语言时,都要面对它超过25年的进化史。由于需要记住很多特例,所以R语言的学习会比较困难。

  • R并不是速度很快的编程语言,尤其是写得很差的R代码运行起来会非常慢。R还非常耗费内存

 

从个人角度来看,我觉得这些挑战也为有经验的程序员创造了一个极大的机会,让他们可以对R语言和R社区产生深远而有益的影响。R用户确实应该写出高质量的代码,尤其是在进行可重复研究时,但是他们现在还不具有这样的能力。我希望本书不仅可以帮助更多的R用户成为R程序员,还非常鼓励正在使用其他语言的程序员对R语言做出贡献。

 

 

2

本书的目标读者

本书是针对两个互补的群体:

  • 想深入学习R语言、理解R语言如何运作并学习解决各种问题的新策略的中级R程序员。

  • 正在学习R语言,并想知道R语言为什么这样工作的其他语言的程序员。

 

要从本书获得最大收益,你需要编写大量的R语言或者其他语言的代码。你应该熟悉数据分析的基础知识(即数据的导入、操作和可视化),并且已经编写许多函数,同时熟悉CRAN软件包的安装和使用。

 

本书介于参考书(主要用于查找)与线性可读的书之间。这涉及一些权衡,因为在使材料保持一致的同时很难线性化材料,如果你已经熟悉特定的技术词汇,则更容易解释一些概念。本书尝试使用脚注和交叉引用来确保即使在你只阅读其中一章时仍然可以理解里面的内容。

 

3

通过本书你可以学到什么

我认为本书描述的这些技能都是高级R程序员应该掌握的:对基础知识的深刻理解以及广泛的词汇表,意味着你可以根据需要学习更多相关主题的知识。

 

读完本书之后,你将掌握以下内容:

 

  • 熟悉R的基础。你将理解复杂的数据类型和对它们进行运算的最佳方法。你将对函数如何工作、环境以及如何使用条件系统有深刻的了解。

  • 理解什么是函数式编程,以及为什么函数式编程是数据分析的有用工具。你将能快速地学习如何使用现有工具,以及如何在需要的时候创建函数。

  • 了解R丰富的面向对象系统。你将最熟悉S3,但同时也将了解S4和R6,知道在需要时可以在何处查找更多信息。

  • 欣赏元编程这把双刃剑。你将能在遵守原则的前提下使用tidy运算(tidy evalua-tion)来创建函数,从而减少代码的输入量并创建优雅的代码来表达重要的运算,还将理解元编程的危险并知道何时避免它。

  • 对于R中什么样的操作会很慢且耗费内存能够产生很好的直觉。你将知道如何使用分析来找到阻碍性能提高的瓶颈,还会学到足够多的C++知识,将很慢的R函数转换成非常快的C++程序。

 

4

第2版更新内容

  • 首部分增加三章新的内容:名字和取值、控制流、条件。

  • 全面介绍面向对象编程,涵盖S3、R6、S4,以及如何在它们中进行选择。

  • 更深入地介绍元编程,包括新的tidy评估框架。

  • 使用新的添加包,如rlang(http://rlang.r-lib.org)和purrr(http.//purrr.tidyverse.org/)进行函数式编程。添加包rlang为低级操作提供了简洁的接口。

5

作者简介

哈德利·威克汉姆(Hadley Wickham),RStudio首席科学家,斯坦福大学和奥克兰大学的兼职教授,并且是R基金会的成员。他是R添加包tidyverse(包含ggplot2和dplyr)的主要开发人员,这些R包旨在支持数据科学。他还是R for Data Science(与Garrett Grolemund 台著)、R Packages和ggplot2:Elegant Graphics for Data Analysis的作者。2019年,他获得了考普斯总统奖——国际统计学领域的奖项。

6

目录

第1章 绪论
1.1 为什么选择R语言
1.2 本书的目标读者
1.3 通过本书你可以学到什么
1.4 通过本书你将不能学到什么
1.5 元技术
1.6 推荐阅读
1.7 获取帮助
1.8 致谢
1.9 约定
1.10 声明

第一部分 基础知识
第2章 名字和取值
2.1 本章简介
2.2 绑定基础
2.3 复制后修改
2.4 对象大小
2.5 原位修改
2.6 解除绑定和垃圾回收
2.7 小测验答案
第3章 向量
3.1 本章简介
3.2 原子向量
3.3 属性
3.4 S3原子向量
3.5 列表
3.6 数据框和tibble
3.7 NULL
3.8 小测验答案
第4章 子集选取
4.1 本章简介
4.2 选择多个元素
4.3 选择一个元素
4.4 子集选取与赋值
4.5 应用
4.6 小测验答案
第5章 控制流
5.1 本章简介
5.2 选择
5.3 循环
5.4 小测验答案
第6章 函数
6.1 本章简介
6.2 函数基础
6.3 函数组合
6.4 词法作用域
6.5 惰性求值
6.6 参数
6.7 退出函数
6.8 函数形式
6.9 小测验答案
第7章 环境
7.1 本章简介
7.2 环境基础
7.3 环境递归
7.4 特殊环境
7.5 调用堆栈
7.6 模拟数据结构
7.7 小测验答案
第8章 条件
8.1 本章简介
8.2 信号条件
8.3 忽视条件
8.4 处理条件
8.5 自定义条件
8.6 应用
8.7 小测验答案

第二部分 函数式编程
第9章 泛函
9.1 本章简介
9.2 第一个泛函:map()
9.3 purrr风格
9.4 map变体
9.5 reduce系列
9.6 判断泛函
9.7 基础泛函
第10章 函数工厂
10.1 本章简介
10.2 工厂基础
10.3 图形工厂
10.4 统计工厂
10.5 函数工厂+泛函
第11章 函数运算符
11.1 本章简介
11.2 现有的函数运算符
11.3 案例学习:生成你自己的函数运算符

第三部分 面向对象编程
第12章 基础类型
12.1 本章简介
12.2 基础对象与OO对象
12.3 基础类型
第13章 S3
13.1 本章简介
13.2 基础
13.3 类
13.4 泛型和方法
13.5 对象风格
13.6 继承
13.7 分派细节
第14章 R6
14.1 本章简介
14.2 类和方法
14.3 控制访问
14.4 引用语义
14.5 为什么是R6
第15章 S4
15.1 本章简介
15.2 基础
15.3 类
15.4 泛型和方法
15.5 方法分派
15.6 S4和S3
第16章 权衡
16.1 本章简介
16.2 S4与S3
16.3 R6与S3
……

第四部分 元编程
第五部分 高级技术

上下滑动查看

点击链接了解详情并购买

更多精彩回顾

书讯 |9月书讯(下)| 开学季,读新书

书讯 |9月书讯(上)| 开学季,读新书

资讯 |TIOBE 9 月编程语言:C++ 突起、Java 流行度下降

上新 | 一本书带你吃透Nginx应用与运维
书单 | 开学季——计算机专业学生必读的10本畅销经典

干货 | 用户画像从0到100的构建思路

收藏 | 更新!更薄!更精华:《JavaScript编程精解》来了

视频 | 4min视频带你了解阿里B2B电商算法

赠书 |【第20期】实践深度学习?先接住这三板斧再说

点击阅读全文购买

这篇关于R语言入门难、学不会?这本R语言编程指南解救你的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/323373

相关文章

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据