康纳哈里斯:我还是 想一些令人兴奋的视频 由专业咨询公司制作 使用R A大量的工作。 旁白:什么是背后的统计, 在分析和可视化 今天最亮的数据科学家 和商界领袖依靠 做出强有力的决策? 您可能不总是看到它。 但它的存在。 这就是所谓的R,开源R--的 统计编程语言 全球数据专家 过度使用的一切 从映射广泛的社会 与市场趋势在线 以发展金融和气候 模式,有助于推动我们的经济 和社区。 但究竟什么为R 和在哪里R开始? 本来嘛,R开始 这里两位教授 谁想要一个更好的统计 平台为他们的学生。 因此,他们创建了一个模型 统计语言S.后 他们和许多人一样, 不停地工作,并使用R, 对于R创建工具和查找 对于R每天都有新的应用程序。 由于这是 世界各地的社区的努力, ř持续增长数千 内置用户创建库 提升自主功能和 人群来源的质量验证 从最被认可的支持 行业领袖在各个领域的 使用R.这是伟大的,因为 R是最擅长做什么。 迅速萌芽专家 很容易理解,互动, 和可视化的数据显示其迅速 ř全球用户不断增长的社区 并了解如何开源 - [R继续塑造 统计未来 分析和数据科学。 康纳哈里斯:好,太好了。 所以我自己的演讲 会多一点清醒。 它不会涉及到多 令人振奋的背景音乐。 但是当你在视频中看到,R是排序 的通用程序语言。 但它的创建主要是 对统计工作。 因此,它的设计进行统计, 进行数据分析,数据挖掘。 所以你可以看到这个在很多 该设计选择R的制造商 进行。 它的设计主要是, 人谁不 专家在编程,谁 刚拿起节目 就在身边,使他们可以做他们的工作, 在社会科学或统计学 或什么的。 它有很多非常 从C.重要的区别 但语法和范例 它使用大致相同。 你应该觉得很 驾轻就熟了蝙蝠的权利。 这是命令式语言。 不要太担心了 如果你不知道这个词。 但是有一个区别 当务之急,声明之间, 和功能。 当务之急只是意味着你做 语句基本上都是命令。 再解释或 计算机跟随他们一个接一个。 它的弱类型,有 在R没有类型声明 然后行 不同类型之间 更宽松的不是位 它们是在C中,例如。 正如我说有 非常广泛设施 对于图形,统计 分析,数据挖掘。 这些都被内置到 语言和,作为视频说 数以千计的第三方库 你可以下载并免费使用 非常宽松的许可条件。 因此,在一般情况下,我建议 你看看这两本书 如果你去工作,R.一 他们是官方ř初学者 指南。 它是由维护 R的核心开发人员 你可以重新下载,免费的 充电和法律上的该链接存在。 所有这些载玻片要去 在互联网上,在CS50网站 后这样做。 因此,没有必要复制 下来疯狂。 另一种是 教科书卡斯马Shalizi, 谁是一个统计学教授 卡内基·梅隆大学,被称为高级数据 从分析 查看的基本点。 这不是主要的R书。 这是一个统计的书, 这是一个数据分析的书。 但它是人们十分便利谁 有统计数据的知识一点点。 我从来没有采取正式课程。 我只知道的点点滴滴 从各有关学科 我已经在采取课程。 我能够理解 它非常清楚。 所有附图中给出 在R它们R中制成 他们也有代码清单 每个数字下面告诉您 如何使每个人物有R代码。 这就是,如果非常有用 你想效仿 有些图你在书上看到的。 并再次免费下载 stat.cmu.edu/cshalizi/对不起, 应该削减波浪cshalizi。 我会确保纠正 当官方的幻灯片上。 / ADAfaEPoV这仅仅是 首字母缩写的书名。 所以一般caveats--ř 有很多的功能。 我只是要能够覆盖 很多事情的表面。 研讨会也在第一部分 将是一些数据转储。 我很抱歉。 基本上,我要去 向您介绍了很多东西 马上蝙蝠,去 尽快。 然后我们去 有趣的部分,这是 演示,我可以告诉你一切 我们已经在屏幕上谈到。 你可以在你自己玩。 因此,有将是一个很大的 技术的东西扔了就在这里。 不要担心复制所有下来。 因为,你可以得到所有的 东东在CS50网站后。 而B,这不是真的那么重要 从幻灯片记住这一点。 它更重要的是,你得到 一些直观的设施与它 而来自只是在摆弄。 那么为什么要使用R' 基本上,如果你有一个项目, 涉及挖掘大型数据集,数据 可视化,你 应该使用R.如果你 做复杂的统计分析, 这将是很难在Excel, 例如,它会 也可以还good-- 如果你正在做统计 分析认为的自动化。 比方说,你正在维护网站。 你想读的服务器日志 每一天,编译一些名单, 像上面国家的 您的用户来自哪里, 多久了一些汇总统计 他们花费在您的网站或什么的。 而你要每天这样跑。 现在,如果你这样做是在Excel中, 你必须去你的服务器日志, 导入到 Excel数据表格, 手动运行所有的分析。 随着R,你可以写一个脚本。 安排其运行每一天 从您的操作系统。 然后每天晚上2:00 AM, 或者当你安排其运行, 它会通过看你的 互联网流量的那一天。 然后到了第二天,你会 有这样的光泽,新报告 或与所有的任何 信息你问。 所以基本上R是用于Cisco 编程与思科的分析。 初步完成。 让我们进入真正的东西。 因此,有三个实 类型的语言。 有数字类型。 有排序之间的差的 整数和浮点, 但不是真的。 有一个字符 型,这是字符串。 还有的逻辑 类型,这是布尔值。 你可以类型之间的转换 使用这些功能的数字, 人品,作为逻辑。 如果调用,例如, 作为数字上的绳子, 它会尝试读取该字符串 作为一个数,以相同的方式 这A2I和scanf做,和C.如果 你叫的数字上真的还是假的 将转换为1或0。 如果调用的字符 任何东西,它会 将其转换成 字符串表示。 再就是向量和矩阵。 因此,载体基本上是 1维数组。 他们就是我们所说的阵列 C.矩阵,2维数组。 再高 维数组,你可以 有3个,4个,5个维度或任何 数值串, 的逻辑值。 您还可以列出哪些是 一种关联数组。 我会进入一个位。 因此,一个重要的事情 是旅行达人在研发 是不存在 真正的,纯粹的原子类型。 有间没有实际的区别 一个数,像一个数值, 数值和列表。 数值实际上是 相同长度为1的向量。 这具有许多 重要的意义。 一,这意味着你可以做 事情很容易涉及 如添加一个数字的向量。 R将基本图 什么你的意思。 我会得到,在第二。 这也意味着,有没有办法 该类型checker--的程度 这类似的东西 存在于R--告诉 当你传递的单个值 当它期望的阵列,反之亦然。 而这可能会导致一些奇怪的 麻烦,我碰到的时候 我在我的暑假作业使用R上。 并且没有混合类型的数组。 所以,你不能有一个数组是的 第一要素是,我不知道, 字符串“约翰”和 第二个因素是42位。 如果试图这样做,那么你会得到 一切都只是转换为字符串。 因此,我们有串约翰,串42。 因此,不寻常的语法features--最 的R语法非常类似于C. 有几个重要的不同。 打字非常弱。 因此,有没有变量声明。 分配使用的怪 错误操作员小于连字符。 评论与#号。 我想现在日子里,我们把它叫做哈希标签 虽然这不是真正accurate--不 双斜杠。 模块化的残留物与%%的迹象。 整数除法是%/%,这是 很难阅读时,它的预测 在屏幕上。 你可以得到的范围 整数,结肠。 因此,2,5会给你一个向量 的所有的数字2到5。 数组是一索引, 这螺丝了很多人 ,如果他们是从更 典型的编程语言, 像C,其中最 事情是零索引。 再次,这是其中R的传统 对于喜欢不是一种语言 专业编程人员的用武之地。 如果你是一个社会学家或 一个经济学家或东西 而你尝试使用 - [R基本上作为一种辅助 你更重要 业务, 你会发现 一个索引多一点自然的。 因为你开始计数 在1在日常生活中,不为0。 for循环,这类似于 在fo​​reach构建在PHP中, 你会得到 学习in--很快。 这是对价值的载体 那么你可以做的事情的价值。 听众:那是拿出在课堂上。 康纳哈里斯:噢,那是 拿出讲座,优秀的。 听众:分配,是 应该从正确地指出剩下什么? 康纳哈里斯:从右到左,是的。 你可以把它看作是对价值 推入变量的权 在左边。 听众:OK。 康纳哈里斯:最后 函数的语法是有点怪。 你函数名FOO,分配 这个关键字的功能,其次 所有的参数,然后 体后的功能。 同样,这些东西可能 看起来有点怪。 他们会成为后的第二天性 您使用了一点的语言。 因此载体,方式 构造一个向量 你是C类,这是一个关键字,那么 所有你想要的数字或字符串 或什么的。 参数也是载体。 但由此产生的数组被夷为平地。 所以,你不能有阵列,其中 有些元素是单数 有些元素是数组本身。 所以,如果你试图构建 阵列是第一元件是4 和第二元件 是阵列3,5你 刚拿到三个元素的数组,4,3,5。 它们不能是混合类型。 如果您尝试读取或写入 一个向量的边界的外 你会得到这个值被称为NA一 它代表一个缺失值。 这是为 像统计学家谁 正在使用不完整的数据集。 如果您应用的应该功能 拿一个号码到一个数组 那么你会得到的是,在 函数映射在阵列。 所以,如果你的函数让我们说需要 数字,并返回其方。 您应用到阵列2,3,5 您将获得的是阵列4,9,25。 这是非常有用的 因为这意味着你 不用写for循环的 做这样应用很简单的事情 一个函数到数据集的所有成员。 如果您正在使用大型哪家 数据集,你必须做很多。 二元函数 通过进入应用条目。 我会到这一点。 您可以使用数组访问它们 或用方括号载体。 所以向量名方括号1 会给你的第一要素。 矢量名方括号2 会给你的第二个元素。 你可以通过一个载体 指数和你会 找回了基本的子因素。 所以,你可以做载体的名字支架C,2,4 你会得到了包括矢量 第二和第四 数组的元素。 如果你想只是一个 快速汇总统计 像四分载体的 范围内,中值,最大值,什么的, 您只需键入汇总 矢量名,并得到了这一点。 这不是在真正有用的 编程,但如果你玩 周围的数据集,这是得心应手。 Matrices--基本 高维数组。 他们有这个特殊的记号语法。 矩阵,获取一个数组 充满in--对不起,矩阵的数据, 行数,列数。 当你有一些数据,它填补了 阵列基本上将从上到下 第一。 然后从左向右。 所以,这样的。 而R已经建成 矩阵乘法, 谱分解, 对角化,很多东西。 如果你想要更高的尺寸 阵列,所以3,4,5, 或任何方面,你可以做到这一点。 语法是数组暗淡等于C, 然后尺寸的列表。 所以,如果你想有一个4维数组 尺寸为4,7,8,9,阵列, 昏暗等于C(-4,7,8,9-)。 您访问单个值与支架 第一项逗号第二个条目。 你可以得到整个切片 的行或列。 有了这个不完整的语法是 只是行号逗号或逗号列 数。 因此,列表是一种关联数组。 他们有自己的语法在这里。 同样不疯狂 复制这一切了。 这只是让人们 经过幻灯片后 拥有这一切都在一个不错的参考。 而这将成为很自然的,一旦 我实际上是通过演示走路。 因此,列出了主要相关阵列。 您可以访问值 列表名称,美元符号,键。 所以,如果您的列表名为foo, 那么你就可以访问它这样。 你可以得到一个完整的键值对 通过传递在方括号索引。 如果你从一个不存在的阅读 键,你会得到空。 它不会出错。 事情是,R会做的 多与空,因为它可以。 这可能意味着,如果你 没想到得到空出 一些列表读,你会得到一些 不可预知的错误进一步回落 路线。 这发生在我身上我 暑期工当我使用ṛ 在那里我改怎么有一定 名单是在一个地方定义 但没有后来就改 从它读取值的代码。 所以,事情的经过是我 读空值出这份名单的, 将它们传递到功能, 而且是很迷茫 当我得到了各种各样的 随机无穷此起彼伏 在此功能。 因为如果你使用特定的最大 或最小功能为null, 你会得到无限的价值了。 数据帧,他们列表的一个子类。 每个值是一个向量 的长度相同。 而他们用于展示, 基本上,数据表。 有这种初始化语法。 这一切,再次,要多 更清晰的,当你到了演示。 约在好处 数据帧是你 可以给名称的所有列 和名称的所有行。 而这样就使得访问 他们一点友善。 另外这是大多数的功能, 阅读从Excel电子表格中的数据 或从文本文件,例如, 将读取其数据。 他们会把它变成 某种形式的数据帧。 所以functions--功能 语法是有点怪异。 再次它的功能的名称, 分配,此关键字的功能,然后 参数列表。 因此,有一些不错的东西 有关如何功能在这里工作。 首先,你可以实际分配 缺省值的某些参数。 所以,你可以说R1 equals--你可以说FOO 是一个函数,其中,R1等于东西 如果用户指定通过缺省 没有参数​​。 否则,它是什么,他插嘴说。 这是非常方便的 因为我们的很多功能 有动辄几十或 数以百计的参数。 例如那些用于绘图 图表或绘制散点图 有控制参数 一切从标题和轴 标签的回归线的颜色。 所以,如果你不想 让人指定 其中每一个人 数以百计的参数 控制每一个方面 一个情节或回归或什么的, 这高兴有这些默认值。 然后你其实可以 写你看到的回到这里。 或者找一个更好的例子。 当你调用函数,你其实可以 使用参数名称调用它们。 所以这里有一个例子 矩阵的构造。 它采用三个参数。 通常你的数据, 这是一个矢量。 你有N个行,这 是行数。 你有N个cols--列数。 如果您键入的是 ñ排等于什么 和N COL等于什么时 你调用这个函数, 你其实可以逆转他们。 所以,你可以把ñ山坳第一和N行 第二,它将使没有区别。 所以这是一个不错的小功能。 难道进口和出口。 这是可以做到的,基本上。 也有设施写出来 任意ř对象二进制文件 然后读回在后面。 这是方便,如果你正在做的 一个大的互动环节 - [R 你需要保存 东西非常快。 默认情况下R的工作目录 该文件被写入伸到 和阅读。最 你可以看到, getwg,它与setdw变化。 没有什么特别有趣这里 所以,现在的实际统计 stuff--多元线性回归。 因此,通常的语法 有一点复杂。 该模型基本上是一个大的对象。 它被分配给LM, 这是一个函数调用。 的第一元件,在y 波浪X1加上什么。 我的语法,这里是一个有点混乱。 我很抱歉,这 是标准的方式 该计算机科学书籍做到这一点。 但它是一个有点不可思议。 所以基本上,这是LM 括号,第一个项目 是变量 - 很抱歉,因 变波浪X1以及X2加 然而,许多独立 变量你。 然后这些可以是 矢量,长度都相同。 或者它们可以是柱 在一个数据帧标题 您刚才指定的 第二个参数数据帧。 您还可以指定 更复杂的公式 所以你不必线性 倒退一个因变量, 或在一个预先存在的载体一种载体。 你可以这样做,例如, 矢量分量Y的平方加1 而回归的对抗 登录一些其他的载体。 您可以打印的摘要 模型用这个命令被称为 summary--只是总结模型的括号。 再次别的东西我要澄清。 别的东西,会得到纠正 在幻灯片上在互联网上。 如果你只是想计算 一个简单的相关性 你可以使用相关矢量 1矢量2功能核心。 方法是通过缺省 皮尔逊相关。 这些都是通用的标准,你可以做。 此外,还有斯皮尔曼和 Kendell关系 这是一些不同的 等级次序相关性。 那么,他们不计算产品 向量相互之间的时刻, 但载体的军衔命令。 稍后我会解释。 听众:快问 CONNER哈里斯:当然可以。 听众:所以,当你计算 对于简单的相关性做 你认为有一个统计 意义的相关? CONNER哈里斯:你不必。 直线运动基本上只是一台机器。 这将需要两件事情 它会吐出 系数的最佳拟合线。 它还报告标准 错误的那些系数。 它会告诉你,就像是 拦截统计学显著 或者从0差异。 是最好的斜率 拟合线统计 不同于零,等等。 因此,它假定什么,我想, 是你的问题最好的答案。 好。 Plotting--所以主要的原因,你应该 使用R,像多元线性回归。 基本上每一种语言 有一些设施的。 老实说的r语法 回归是一个有点神秘。 但绘图是它真正的亮点。 主力功能是阴谋 它需要两个矢量,x和y。 然后椭圆代表一个非常 大量的可选参数, 控制一切,从标题到色彩 ,各线或各点 对情节类型。 你可以有散射 图或线图。 [听不清] 2载体 的长度相同。 你可以先用这个连接 在你的脚本数据帧。 而这会让你只使用列 头,而不是分开的载体。 您可以添加最合适的线路和本地 回归曲线的图形。 这些命令上市 在这里,AB线与线, 默认情况下,这些获得 写入到弹出窗口 因为它假设 您使用的是 - [R交互。 如果你不是,你可以 写两个文件 是真的是你想要的任何格式。 对不起,我有我才意识到一个错字。 如果你想打开 另一种图形设备 你可以使用这个功能叫做PNG或 JPEG或很多其他的图像格式。 你可以写图形来 任何文件名指定。 要取消,你必须use-- 我没有在slide--写 但有一个功能叫做开发 点关闭不带参数。 再就是设施 对于3D绘图 和轮廓绘制 如果你想 两个独立的变量的曲线图。 我不会进入这些现在。 也有一些 动画设施 这些通常是 由第三方维护。 我已经做动画有R图, 但我没有使用这些第三方 库。 所以我真的不能证明 他们有多好。 我建议,如果你想 使基于R动画 是你可以写出所有的 为动画帧 然后你可以使用一个 第三方program-- 典型的是所谓的FFmpeg 或ImageMagick--缝合 所有的帧成一个动画。 因此,时间的演示。 所以,如果你使用任何类Unix系统 这是Linux的BSD,但谁使用BSD。 OS X打开一个终端窗口, 在命令提示符下键入R上。 如果你现在是R工作室或 等,它们也适用。 对于Windows用户,您应该 能求R在开始菜单中。 它应该叫什么 如R 64 3点什么。 打开那里。 所以,现在让我只 打开一个终端窗口。 好吧,搜索。 听众:命令空间 CONNER哈里斯:命令空间,谢谢你们。 我通常不使用Mac电脑。 终端,显示新窗口。 新的窗口设置 基本,R.所以你应该得到 一个值得欢迎的消息,这样的事情。 所以我基于R交互。 你也可以自己写的 - [R脚本。 基本上脚本运行 确切相同的方式 如果你坐在电脑 键入每行一次一个。 因此,让我们开始通过一个载体。 一个箭头C 1,2。 1,2,4。 可以,当然。 我可以让字体大小大。 听众:命令加 CONNER哈里斯:命令加。 命令加。 好吧,是不是这样? 好? 好。 因此,让我们先来 声明向量列表。 做一个,箭头,C 1,2,4。 我们可以看到一个。 不要担心支架存在。 该支架是如此,如果你打印出来 很长的阵列,我们可以在哪里。 一个例子是,如果我 只想范围为2〜200。 如果我打印了很 多头排列,括号 只是这样我就可以保持 跟踪哪个指数 我们是在如果我在寻找 通过这个直观。 所以无论如何,我们有一个。 所以我说,阵列交互,然后 非常漂亮的,例如, 一元的操作是这样的。 那么,你认为我会 如果我输入一个加1得到什么呢? 是的。 好了,现在我要让 这种不同的阵列。 比方说,B C 20,40,80。 所以,你有什么感想 这个命令不会做? 添加的元素。 所以基本上这就是它做什么。 所以这是非常方便的。 所以,我怎么样我做到这一点。 C 是,我们说,6次1到10。 所以,做什么我想看看 包含的,你觉得呢? 因此,所有六的倍数。 现在,你有什么感想 如果我这样做会怎样呢? 我会让这一点更为清晰,C,C。 所以会发生什么,你 想,如果我这样做? 一加C。 [听不清] 听众:无论是一个错误,或者它 只是增加了前三个元素。 CONNER哈里斯:不太。 这就是我们得到的。 会发生什么事是更短 阵列,一个,得到了循环。 所以,我们得到了124,124,124。 是啊。 基本上,你可以查看 在此之前的行为,加1, 作为此问题,其中一个子类 最短阵列仅仅是数 1,这是一个元件阵列。 我只是说向量所有 的时间,而不是数组, 因为这是第r 文档通常不会。 这是一个根深蒂固的Ç习惯。 好了,所以现在我们有这个数组。 因此,我们有这个数组,C。 我们可以总结 对C,总结C统计数据。 这是很好的。 所以,现在让我们做一些矩阵的事情。 比方说,m是一个矩阵。 让我们使它成为一个三乘三一。 这样的nrows等于3,以及NCOLS等于3。 而对于数据让我们do--等什么 你觉得这是要干什么? 对,这是下一个。 这是nrow和ncolumn。 所以我做了什么是我 宣布三乘三矩阵 我已经通过了一个九元素的数组。 因此,所有的对数 元素从1到9。 而所有这些数值填写 了array--遗憾? 听众:这些都是基地10日志? CONNER哈里斯:不,日志 自然对数,所以e为底。 是的,如果你想基地 10日志,我认为你必须 记录什么,通过日志10分。 并在[听不清]只是这样的数据 填满阵列,所以从上到下, 然后从左向右。 如果你想要做一些其他的 阵列,假设n是矩阵。 让我们这样做,我不知道,2至13。 或者,我会做一些更有趣。 我会做2〜4。 nrow等于,让我们说,3。 NCOL等于4。 ñ。 因此,我们已经得到了这一点。 现在,如果我们要乘这些, 我们将尽百分之n次个百分点, 因为这是ñ。 我们有矩阵产品。 通过他们的方式,你怎么看 当我宣布n,则2〜4 矢量得到循环,直至 它填补了所有的n? 如果你失恋了 特征值分解, 这是我们可以很容易做到。 我们可以做的本征ñ。 所以这是我们第一次 遇到的列表。 所以本征,n是具有两个键的列表。 值,这是这个数组这里。 和载体,这是本数组这里。 所以,如果你想提取, 比方说,这第三列 从特征向量矩阵,因为 本征矢量是列向量。 因此,我们可以做的VEC征ñ美元符号 的[听不清]载体,逗号3。 VEC。 是这样的,正如您所料。 然后说了n次百分比次VEC。 因此,结果在这里肯定看起来像 如果我们把第三个特征值这里, 其对应于 第三个特征向量。 它只是乘以一切 这个特征向量,组件明智的, 由特征值。 而这正是我们所期望的, 因为这是特征值。 有没有人在这里不 采取线性代数? 一对夫妇的人,OK。 只要把你的大脑关闭了一点。 事实上,如果我们把本征ñ 美元符号值的3倍VEC, 也得到同样的事情。 它以不同的格式作为行 向量,而不是一个列向量, 但什么大不了的。 所以,这些基本上都是不错 的事情,我们可以用矩阵做, 展示列表。 我应该表现出了不错的 关于功能的事情为好。 因此,让我们say-- [听不清] 功能,姑且称之为 它FUNC对功能N N squared-- 实际上,这不是真正的最好的。 A,B,A方和B。 因此,一件事 功能,再次是他们 并不需要显式的return语句。 所以,你可以just--的 评估的最后一条语句 将返回的说法, 或返回的值。 因此,在这种情况下,我们只评估 一个语句,一个平方与b。 这将是默认的返回值。 它绝不会伤害到放 明确的返回值, 特别是如果你正在处理一个 很复杂的逻辑功能 流。 但你并不需要它们。 所以,现在我们能做的FUNC 5,1,和 基本上这是你所期望的东西。 别的东西,我们可以做的, 我们其实可以做FUNC b 等于1,a等于5。 因此,如果我们在这里指定号码, 其论点是哪个说法 在功能上,我们可以前后翻页 这些价值的地方,我们想要的。 听众:是否有什么原因 写出来用B 相当于以只用反对 数字和逗号? CONNER哈里斯:是的,通常 做到这一点,如果你有功能 有不少争论。 这可能经常是这样 标志,你只希望 要在极少数情况下使用。 而这种方式,您可以only--你 可以参考特定参数 要使用 非默认值, 而你没有写出来 一串标志等于以后他们是假的。 或者,我可以写一遍这个 像B A默认值等于2。 然后我可以做˚FFUNC, 我会做4,1这个时候。 和17,这是4平方 加1,如您所料。 但是,我也可以只 把这种用FUNC 4, 我会得到18,因为 我不指定湾 所以B得到的2的默认值。 好了,现在如果你 随着演示下, 在您的命令键入此行 提示,看看会发生什么吧。 其实,不这样做。 键入这一点。 你应该得到这样的事情。 所以mtcars是一个内置的数据 这个演示设置 目的自带with--自带 在默认情况下你ř分布。 这是从统计的汇编 1974年发行的汽车趋势杂志 对一些不同的车型。 因此,有英里每加仑,cylinders-- 我算了一下DISP is--马力。 大概。 如果你只是谷歌MT车, 再一个第一的成绩 将会从 官方R文件 它会解释 所有这些数据字段。 所以重量is--重量为 重车万吨。 Q秒的四分之一英里的时间。 所以,现在我们可以做一些有趣的事情 关于MT车是一个数据字段。 因此,我们可以做的事情 像行名,山车。 这是所有行的列表中的 数据集它们是汽车的名称。 我们可以做colnames山汽车这一点。 如果你这样做吨车, 子数值指标,如2。 我们得到了第二列出 此,这将是圆柱体。 听众:你做了什么? CONNER哈里斯:我打 吨车,支架E, 这给了我第二 柱而出吨的汽车。 或者,如果我们希望有一个排,我可以输入 mtcars逗号2中,例如。 其他2轮逗号,这样。 这去你行。 这这里只是给你一个 列,但列的向量。 我才意识到我现在 忘了展示 关于向量一些很酷的东西 您可以与指数做。 因此,让我做,现在。 因此,让我们可做C gets--把 本上pause-- 2次1至10。 所以C是只是要 矢量2至20。 我可以把元素像这样,C2。 我可以通过一个载体 这样,C--让我 使用不同的名称比C一样,VEC℃。 基本上,我在做什么 这让你没有得到 C的差别混淆为 载体建设中的作用, 以及c作为变量名。 VEC括号中的C 4,5,7。 这将让我离开的第四,第五, 和该阵列的七个要素。 我所能做的VEC,放在一个负 指数一样,负4。 这将让我离开这与 第四个元素除去。 然后,如果我想要做切片, 我可以通过6做VEC 2。 2结肠6只是另一个 载体,它是2,3,4,5,6。 吐出来了。 所以无论如何,回山车。 因此,让我们做一些回归。 比方说,模型gets--我们 线性regress--我不知道。 首先,让我们不要附加当然mtcars。 所以[听不清] LM模型,让我们回归 每加仑英里波浪重量。 然后数据帧mtcars。 所以总结模型。 好了,这看起来有点复杂。 但基本上,看到如果我们 试图表达英里每加仑 作为重量的线性函数, 那么,我们在这里得到了这条线, 其拦截在37.28。 37.28。将理论英里 每加仑汽油的汽车,重为零。 然后每增加吨, 你敲约为每加仑5英里 关闭的这一点。 这两个系数的你 可以看到,标准误差存在。 而且他们都非常 统计学显著。 因此,我们可以非常肯定 1 E-10的负10。 因此,1次东西的负 10,如果你犯了一个更重的车了, 它会每加仑差英里。 或者,我们可以测试一些其他的模式。 像代替 重量回归这一点, 让我们回归它记录的重量, 因为也许有效重量 里程数在某种程度上不是线性的。 这给了我们平方的0.7528的河 因此,让我们试试这个。 这一次,让我们做一个 不同的变量了。 Model2的。 所以综上所述,模型2。 好吧,让我们再次 这里有我们的最佳拟合线。 而这个时间 - 这是说, 基本上,你每次 增加的重量 车用电子的一个因素 你失去了这么多英里每加仑。 所以,这一次我们的剩余标准 错误它 - 那没关系,真的。 剩余标准误差为 基本上只是标准错误 你离开后, 带走的趋势线。 而我们的R平方在这里为0.81, 这是比好一点什么 我们以前,0.52。 所以,现在让我们来添加一个 长期以这种回归。 因此,让我们回归英里每加仑 既对权数的日志 并且,让我们做,Q英里, 四分之一英里的时间。 OK,它必须有the--没事,QseC的。 QseC的。 Actually--对不起,什么? 我把这个东西 否则,除了模型2。 让我把这个model3。 所以,现在我们可以做的总结model3。 等再次,这基本上 你所期望的东西。 你有积极的拦截。 有效增加 重量为负。 和有效 增加四分之一英里的时间 是积极的,但尽管 比不上重量。 现在直观,可以使感 此说想想跑车。 有一个非常快的加速, 在很短的四分之一英里的时间。 他们也将使用更多的天然气, 而更明智的车会 有较慢的加速, 高四分之一英里倍, 并使用少气,,所以 更高的英里每加仑。 大。 所以现在是时候 剧情是这样的。 因此,让我们do--所以裸 骨子里,我们可以做plots-- 因为我已经贴有该数据帧 before--我们可以做的地块,重量英里。 使这个有点大了。 在那里,我们基本上有一个 散点图,不过分 是一种难以对这个看。 我不记得随便什么 语法是不断变化的情节。 所以我想这将是 一个很好的时间来培养, 有一个非常好的内置的帮助 功能,帮助引号函数名。 我们将调出基本 任何你想。 我想我会真正做到这一点 类型等于P代表点图。 这是否能改变什么? 不,不是真的。 好吧。 出于某种原因,当我这样做 在我自己的电脑前一阵子, 所有的散点 为更清晰。 总之,是散那种看得见? 还有一个人也没有。 有几个在那里,有几个。 那种你可以看到他们,对不对? 所以,如果我们想增加一个最佳拟合线 这个情节在这里,这是一个有点裸露 bones--让我有点漂亮。 主要等于与重量。 英里每加仑。 同样,你可以看到如何有用的 可选的参数在这里也有 不必把事情一 一定的顺序与键盘参数 当你有阴谋的,因为 这些都需要大量的争论。 Xlab等于体重,体重,吨。 好吧。 好了,是啊,这个装置 正在有点烦。 但是,你可以看到那种在那里, 还有一个侧面的图形标题。 在这里there's--底部 这里有轴标签。 我不记得随便 什么命令ars-- 的功能是什么,以增加 这些标签和标题的大小, 但他们在那里。 所以,如果我们要 添加最佳拟合线, 我们可以做一些like--我 有语法写在这里。 所以请记住,我们只需要添加模型 是MPG,体重,mtcars。 所以,如果我想添加一个最合适 行,我可以做的A,B线模型。 只听轰的一声,我们有一个最佳拟合线。 这是一种很难再见到。 我很遗憾的 技术困难。 但它运行基本 左上角到右下角。 而如果规模分别为 做大,你可以看到 该拦截是你能 从汇总统计发现 如果键入汇总的模式。 好了,我希望每个人都得到 东西的感觉是什么 R是,它是很好的。 你可以做远远更好地块比 这对你自己的时间,如果你喜欢。 因此,外国功能界面。 这东西是不是典型 涵盖入门讲座 或介绍任何东西河 这是不太可能你会需要它。 然而,我发现它有用 我自己的项目中来。 而且也没有好 教程联机。 所以我只是要 急于大家通过这个 然后你可以自由地离开。 这样一来,外国 功能界面是什么 你可以用它来调用出来看看 与R.内部功能, R被建立在C.的r算术只是 C'S 64位浮点运算, 这是double类型[听不清]。 你可能想要做的 本作一堆的理由。 为1,R被解释,这是 不编译成机器代码。 所以,你可以重写你的 在C中,然后拿到内部循环 使用R.像的优势 它更方便比C位 它拥有更好的图形 设施和诸如此类的东西。 并同时仍然能够获得 最高速度出了内循环, 这是你真正需要它。 重用现有的C库, 这一点也很重要。 如果你有一些C库一样, 我不知道,傅立叶变换, 或者一些非常宙 统计过程中使用 在高能天体物理 什么的,我不知道。 高能天体物理 更是连想,我想。 但是你可以做具有​​的,而不是 把它们写土生土长的R气口。 而就the--又一遍,就像如果你 看在大多数讨论R的默认库, 在内部,的内部是 要使用外部函数 接口非常广泛。 他们会喜欢的东西傅立叶 转换或计算的相关性 系数C语言编写的,他们将 只是他们于R包装。 该接口是一个 有点困难。我想 其难度被夸大了 很多你会发现说明。 但无论如何,这是一个有点混乱。 而且我一直没能 找到一个很好的教程吧, 所以这是它现在。 同样,这全段 更供日后参考。 不要担心复制 一切现在油价下滑。 所以,下面的说明 对于类Unix系统, Linux的,BSD,OS X的我不知道 如何在Windows上运行, 但是请大家不要做你的 在Windows上最后的项目。 你真的不想要。 Unix的要好得多集 最多的休闲节目。 所以,基本上外国 功能界面。 如果你想要写一个C 功能有R使用, 它必须采取一切 参数作为指针。 所以对于单个值,这 意味着它指向的值。 对于数组,这是一个指针 到第一元件,其 是数组名实际上的意思。 再次,这是你应该有 漂亮的完全下来后p将五位。 数组名只是指针 到第一元件, 浮点型为双。 而你的函数必须返回void。 唯一的办法,它可以 居然让R发生了什么 是通过修改是R,得到存储器 它通过外部函数 接口。 所以我写了这个 例如这里,这是 一个函数,计算使用 点积的两个向量。 它有两个参数,VEC 1,VEC2, 它们是载体本身 和则n,这是一个 长度,因为再次, R已经建成[听不清]查找 向量的长度,但C没有。 在C语言中,载体是任意 内存分隔块。 所以,这样你就可以 计算点积 只是设置了这一点参数 零,然后遍历 从1星N,因为 N为一个指针的长度, 只是添加了一些 这一点参数。 它可以是很好的做法 如果你打算怎么办 这种写两个单独的C函数。 其中一人has--其中一人刚 采用的参数和类型 他们通常会在C. 因此,它需要一个数组 参数作为指针。 但是,像N个单值参数, 它只是需要的值通过复制, 没有指针。 然后它不 [听不清]出指针。 然后你就可以有 一个不同的,基本上, 包装的功能,基本上 处理要求 外国功能 接口让您。 你把这种在研发的方式是,一旦 你有你的函数用C写的, 你型R CMD SHLIB,R 命令共享库, FOO点C,或任何 你的文件名是, 和OS壳不是在R端子。 这将创建一个 库叫做foo点左右。 然后你就可以在加载 我们的脚本或交互 使用命令DYN点负载。 然后有一个函数 在研发所谓的C点。 这需要参数是 在C中的功能的第一名称 要调用。 然后将所有的参数 该功能, 他们必须按正确的顺序。 您必须使用这些类型 转换函数整数,如 双,人品,并作为合乎逻辑的。 然后,当它返回 列表,这又只是 的关联数组 参数名称和值 后功能运行。 所以在这种情况下,因为点刺有 参数VEC 1,VEC2,和int N,N-出来。 为C点,我们有网点督促, 的函数的名称 我们呼吁,VEC 1,VEC2,类型要挟。 任一向量的长度, 我只是选择了VEC1随意。 这将是更稳健的S个 整数最小长度VEC 1,全长VEC2。 然后,就像双零, 因为我们真的不 关心进入 输出参数,因为我们是 将它设置为反正零。 然后结果将是一个 基本上大的关联数组 VEC 1是什么,VEC2是什么。 但我们感兴趣的 出来,所以我们可以得到这一点。 这又是一个非常玩具的例子 外国功能界面。 但是,如果你要计算点 在循环中大量载体的产品, 或者如果你需要做的 别的东西在循环中, 你不希望依赖于R, 里面确实有一些开销 内置到它,这可能是有用的。 再次,这通常不是 一个介绍主题为R. 这不是很好的记录。 我只是包括它,因为 我发现它在过去是有用的。 因此,不良做法。 我提到,有一个 for循环中的功能。 ,一般情况下不应在 的语言,而不是使用它。 基于R如何实现迭代 在内部,也可以是缓慢的。 他们也只是看起来很丑陋。 ř处理向量非常漂亮,所以 通常情况下,你并不需要使用它。 然后,你通常可以 更换载体通常 这些功能被称为高 为了功能,地图,减少, 查找,或过滤器。 我只是给一些 对这些例子做。 地图是一个高阶函数,因为 它需要一个函数作为参数。 所以,你可以给它一个功能, 你可以给它一个数组, 和它将应用功能 到所述阵列的每一个元素 并返回新的数组。 减少,基本上你给 一个数组,你给它 一个函数有两个参数。 它将首先,应用功能 第一个参数与一些启动值。 然后,以该结果,在第二位。 然后在第三这一结果, 然后,以该结果在第四。 然后返回当它到达终点。 因此,举例来说,如果你想 计算所有元素的总和 在一个阵列,可能比你拨打减少 与[听不清]减小除 功能,如FUNC A,B,返回a与b。 然后启动值0。 而这一切,你可以找到他们 在R文档中所述, 在任何一本教科书 函数式编程。 还有这个类的 函数调用的应用功能, 我don't--他们 有点难以解释, 但如果你看看在[听不清] 预订的,我引用开头, 他解释说他们颇能 他附录R上编程。 更多关于的做法, 追加到载体。 是吗? 我想我应该纠正。 在该第一行中,vec的箭头, 那箭不应该存在。 您可以分配到一个载体, 再次,通过采取它的长度加1 和分配一些值来表示。 这将延长载体,或者你 可以做VEC等于C,VEC newvalue中。 同样,如果你用C与 一个参数作为一个载体, 所产生的层次被夷为平地。 所以,你只得到一个向量 多数民众赞成延长1。 从来没有做到这一点。 你之所以 不应该这样做,这是这一点。 当您分配一个载体,它 给它的存储器某个组块。 如果增加了矢量大小, 它具有重新分配矢量 别的地方。 等再分配是相当昂贵的。 我不会去到如何的详细信息 内存分配器实现 在操作系统级, 但它需要大量的时间 找到新的内存块。 而且,如果你 重新分配很多很多 逐渐增大 块,你最终 有一种叫 内存碎片, 其中可用的存储器是 分成许多小的块 在内存分配器的观点。 而且它越来越难 寻找记忆其他东西。 所以,相反,如果你需要这样做, 你需要从一端长出矢量 到下一个,追加,而不是将其 不断,你应预先分配它。 VEC箭头,向量长度 等于1000,或什么的。 然后你可以只分配 为载体的其中一个值 你一旦分配后一段时间。 我碰到了这一点,再次,我的暑假作业 当我在写NRA差 方程求解。 不是象征性的数字。 我们的想法是,一​​旦你有 一个值的解决方案, 你用它来计算下一个。 所以,我自然天真 倾向是说行, 所以我将开始与一个载体 这是一个很大的价值。 从下一个值计算 那去到我的解向量, 并追加了。 创建别的东西,追加了。 它进行得非常,非常缓慢。 一旦我意识到了这一点 我改变了我的系统 从附加到这个矢量 像10,000至100,000倍, 只是预先分配一个矢量 而刚刚与运行。 我得到了超过1000倍的速度上升。 因此,这是一个非常普遍的 陷阱的R编程。 如果你需要建立一个向量 一块一块,预分配它。 另一种常见的up--此行是我最后一次 幻灯片,不要worry--是错误处理。 R,坦率地说,不 真正做到这一点非常好。 有很多的 问题可能突然出现。 例如,如果你得到一个数组 或矢量出一个功能的 那你期待一个 价值从何而来,反之亦然, 你传递到一个函数, 你写了期待一个值, 这可能是一个问题。 某些功能 因为这样做返回null,也就是说, 从阅读 不存在的键在列表中。 但null不是像C 如果您尝试阅读的地方 从旧的指针,[听不清] 以NULL指针,它只是赛格故障 如果你在调试器它 告诉你到底你在哪里。 相反,空将do--功能 会做不可预知的事情 如果他们两手空。 如果你交到最大空一样, 它会给你负无穷大。 所以,是的。 所以这事 我曾经当我有 换了一堆领域 在我的表结构 曾经在其他地方没有改变他们 当我读他们。 然后我得到了各种随机的 无边结果突然出现 我不知道他们来自何处。 不幸的是,有 没有REAL R严格模式 在那里,如果是你可以说 看起来似乎是一个错误, 只是停在那里,所以我可以 纪律和解决这个问题。 然而,也有一些是 所谓停止,如果不。 这相当于C中的断言, 如果你已经谈到了这一点。 我不认为C断言 为演讲题目, 但你的部门领导 可能已经过去。 而且,如果停止基本上没有采取任何 谓语,所以任何声明 可以是真或假。 如果这是假的,停止其计划。 它会告诉你什么行,你 是在什么条件下失败。 这非常有用,例如, 完整性检查,功能的输入。 所以,如果你有一个函数 你期望的,也就是说, 如果你应该给我一个日期,我想 日期是长度为1的只是一个载体 与地方1到31之间。 如果没有的话,我知道 有什么地方出了问题。 而我选择在此之前停在那里 有随机敲代码为影响 这是很难跟踪到通过。 所以这是一个可能的 使用停机,如果不。 总之,确定。 所以这是结束。 非常感谢你的光临。 我是一个业余级在此。 很抱歉,如果你觉得无聊或 困惑或你有什么。 我很高兴地采取通过电子邮件提问 在connorharris@college.harvard.edu。 这正好也给大家 看着这活或更高版本。 另外,虽然我不 一个TF,我也很 愿意作为一个非官方的 顾问的人谁是 使用R在作为最后的项目。 如果你想的是, 那么就谈谈你的TF 然后给我写一封电子邮件,让 我知道你的工作内容 所以我可以设置会议 与你时间,如果你想。 所以,再一次,非常感谢你。 我希望你喜欢它。 听众:[听不清]。 当然:CONNER哈里斯。 听众:什么样的项目 将一个CS的学生用R进行? CONNER哈里斯:所以,如果你不这样做 东西是纯粹的数据挖掘, 例如,有 很多事情 你可以做与数据 挖掘和机器学习。 你可能想用R表示 的东西的组分。 我长大了,原来,这个例子 如果你正在写一个网站 并且要运行自动化 你的服务器的统计分析 在一定的时间每​​天日志, 这可能是东西是 很容易做到的只是简单 - [R脚本,可以安排 每晚运行,例如。 我敢肯定,如果 有什么理由你 要统计或绘图功能 而有这种自动运行,而不是 具有互动 事情在Excel中, 例如,这件事情 你可能想用R进行。 所以在我任何问题离开? 没有? 好了,好了,再次感谢 您的光临。