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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al