R
文章平均质量分 81
honeyasong
生命曾经有思想的荣华,我们不能失去信仰。
展开
-
第九轮回 没有卵用的寻求帮助
第九轮回 没有卵用的寻求帮助这里住着小偷,由半人马卡库斯把守。居民被由蜥蜴和蛇咬伤。这是一个对于还不是我们拜访的第八轮回的内容、感觉我们的剩余力量被强拖入地域的人的特殊的地方。编写邮件中我们所要经历的的路标至少包括一下。翻译 2016-08-19 19:16:23 · 424 阅读 · 0 评论 -
7.2 S4方法
7.2 S4方法S4方法和绿色的书一致. S3方法简单而强大,还有一点是显得比较临时.S4方法移除了这个临时性–它们更加直接和普遍.S4方法像一条严厉的绳子–当你将自己悬挂在上面,它肯定不会断.但基本上这才是重点–为了让使用者对输出结果更加信赖,程序员是受限制的.不管怎样,这就是设计初衷,它也经常起到作用. 7.2.1 多重调度多重调度是S4方法从S3方法那里剔除的一个特色.假设你有”foo”类翻译 2016-05-01 10:46:28 · 593 阅读 · 0 评论 -
7.1 S3方法
7.1 S3方法S3方法和白色的书一致.在R的观念中,一个对象的属性可以是一组异常丰富的数据对象.在面向对象系统中,S3方法以clsss属性为驱动.它是一个可选的系统.只有当一个对象拥有class属性时,S3方法才会真正起到作用. 有一些函数是泛型的.例如print(),plot(),summary().这些函数查询第一个入参是否带有class属性.如果第一个入参拥有一个class属性,那么这个泛翻译 2016-04-30 11:44:20 · 664 阅读 · 0 评论 -
第七轮回 面向对象之旅
第七轮回 面向对象之旅在第七轮回我们遇到了有罪之人.他说道,”在我的头下方是买卖圣职的人–它们被塞满了狭长的石头缝.” 确实,他们的脚底被火焰炙烤着. 事实证明,S(R是一个方言版)的版本通过书的封面被颜色区别.这些书是:棕色的书,蓝色的书,白色的书和绿色的书.翻译 2016-04-30 11:43:05 · 409 阅读 · 0 评论 -
第六轮回 全局配置
第六轮回 全局配置 异教徒被囚禁于第六轮回的燃烧坟墓中. 一个全局配置可以通过”<<-“实现: > x <- 1> y <- 2> funfunction () { x <- 101 y <<- 102}> fun()> x[1] 1> y[1] 102 但这就像是在火山口生活一样. 如果你需要使用“<<-“,请三思.如果你深思熟虑之后还是觉得需要使用“<<-翻译 2016-04-24 10:45:16 · 526 阅读 · 0 评论 -
5.3 一致性
5.3 一致性一致性是好的.一致性减少了你的使用者需要扩展的工作.一致性降低了bug的出现. 一致性的一种形式是规则和函数入参的命名.是你的用户震惊并不是一个好的主意–即使他们是初学者. 一致性的一个相当不错的骚点是它总是给我们正确的结果.为了实现它我们应该给函数合适的入参.为了确保这个,函数应该检查入参,并且有可能也要检查中间结果.这些检查工具包括if,stop和stopifnot. 有时候翻译 2016-04-16 11:57:12 · 623 阅读 · 0 评论 -
5.2 简洁化
5.2 简洁化让你的函数尽可能地简洁化.这样做有很多优点: 简单的函数对于人类是高效的:他们可以很容易地理解和修改. 简单的函数对于计算机的执行也是高效的. 简单的函数不容易出错,即使出错了也容易找到问题. 简单的函数或许是最普遍的–考虑到问题的本质经常拓宽应用. 如果你的解决方案对于问题看起来过于复杂,那么它很可能是真的.或许对于简单的问题R并没有一个简单的解决方案,但这是翻译 2016-04-16 00:15:57 · 417 阅读 · 0 评论 -
第五轮回 不要写函数
第五轮回 不要写函数我们穿过了Styx河,比沼泽更大的河.Phlegyas煞费苦心地让我们相信他,最终我们做他的小船渡到了河对岸,在这里我们遇到了叛徒.翻译 2016-04-15 09:54:24 · 380 阅读 · 0 评论 -
5.1 抽象化
5.1 抽象R是一个好东西的主要原因是它是一门语言.而语言的魅力便是抽象.在R语言中,函数便是实现抽象的方式.假如我们想要把1到3的整数重复两次.这是一个简单的命令: c(1:3, 1:3)现在假如想要重复这些数字六次或者六十次.用函数来抽象这个操作就变得有意义了.事实上,这种抽象已经有前人做了: rep(1:3, 6) rep()可以完成我们上面的任务和其他一些相似的任务.我们在做一个新翻译 2016-04-14 19:30:07 · 3528 阅读 · 2 评论 -
第四轮回 过度向量化
第四轮回 过度向量化我们避开Plutus–一头脑袋肿胀的恶狼后,掉到了第四轮回.在这里我们遇见了贪得无厌之神. 当没有了有效的方法去实现目标的时候,试试向量化是个不错的想法.然而遇到问题总是想着向量化却不被推荐. 在可以向量化的情况下,我们的潜意思中就会想到使用apply族函数.其实这不是向量化,它们只不过是隐式的循环.apply族函数在定义的时候是包含了一个for循环的.lapply()函数翻译 2016-04-12 22:53:34 · 493 阅读 · 0 评论 -
3.3 不能向量化
3.3 不能向量化有一些操作是不能被向量化的.比如,如果当前迭代建立在上一次迭代的结果上,这样的情况下向量化没有用武之地.(但是一些情况被filter(),cumsum()掩盖了,等等.) 如果你确实需要使用一个循环,那就让它尽可能简洁: 尽可能将更多地操作放在循环之外.例如:如果一个相同或者相似的的序列在每次循环都会被创建,那就在循环开始前首先创建它并且重复使用.创建一个序列是非常快速的,但翻译 2016-04-12 21:33:01 · 686 阅读 · 0 评论 -
3.2 向量化if
3.2 向量化ifHere is some code:if(x < 1) y <- -1 else y <- 1This looks perfectly logical. And if x has length one, then it does as expected. However, if x has length greater than one, then a warning is i翻译 2016-04-11 18:21:44 · 590 阅读 · 0 评论 -
3.1 下标化
3.1 下标化下标化在R语言中非常地强大,并且通常是高效率向量化的关键. 数组和数据框的维度下标化是独立的. 数组(包括矩阵)可以通过一组正整数进行下标化.下标化的索引矩阵的列数和所要查询的数组的维度相同–矩阵是两列.返回的结果是一个包含被选择对象一个向量(而非数组). 列表的下标化和其他向量类似.不过,有两个操作是列表特有的:’′和′[[′,这两种方式几乎差不多,不同之处在于′'和'[[',翻译 2016-04-07 18:18:34 · 433 阅读 · 0 评论 -
第三轮回 跌入向量化
第三章 跌入向量化我们到了第三个轮回,这里阴雨绵绵,令人不寒而栗.冥府守门狗用它的三个喉咙咆哮着.轮回里边站着布拉斯之神,穿着闪闪发光的金黄色斗篷,衣服里边充满了铅以使斗篷沉重地下垂-为了所有的永恒.这就是维吉尔告诉我的:”记住你的学识,一个事物越是完美,它就越是充满了痛苦或者快乐.” 这里是一个例子: lsum <- 0 for(i in 1:length(x)) { lsu翻译 2016-04-05 22:49:25 · 529 阅读 · 0 评论 -
第二轮回 增长的对象
我们到了第二站,这里居住着贪婪的人.让我们看看创建一个有序系列的三种方法. 方法一是增长这个对象:vec <- numeric(0)for(i in 1:n) vec 方法二是首先创建一个固定长度的对象,然后通过下表改变其中的值:vec <- numeric(n)for(i in 1:n) vec[i] 方法三直接创建最终的对象:vec翻译 2016-03-15 19:27:05 · 576 阅读 · 0 评论 -
Cricle One --- 浮点陷阱的一点学习
> 0.1 ==0.3 / 3[1] FALSE> print(0.3 / 3,digits=20)[1] 0.099999999999999992> unique(c(0.3, 0.4 - 0.1,0.5 - 0.2, 0.6 - 0.3, 0.7 - 0.4))[1] 0.3 0.3 0.3> print(0.3,digits=20)[1] 0.299999999999原创 2016-03-13 21:24:14 · 647 阅读 · 0 评论 -
第一轮回 浮点陷阱
在穿过黄泉路之后,我们到了第一站:善良异教徒之家.这些人供奉于”对浮点数无知之神”,这些人认为: .1 == .3 / 3是正确的.他们同样确切地认为: seq(0, 1, by=.1) == .3只有一个翻译 2016-03-12 19:07:28 · 649 阅读 · 0 评论 -
7.3 命名空间
7.3 命名空间命名空间对于面向对象真的并没有要做的.对于比较随意的使用者,这些看起来像是一个不必要的并发症,同时看起来像是复杂性实际是由简单性伪装而成. 假设有两个都有一个recode()函数.你希望使用两个中的一个.但是并不会保证你想要的那个总是被首先查找到.这就是命名空间存在的答案. 为了理解命名空间,我们考虑一个返回一个命名列表的函数.在命名空间中这里有这个函数的一些东西你可以看到(它返回翻译 2016-05-01 11:26:56 · 525 阅读 · 0 评论 -
第八轮回 相信它就像预期那样运行
在这一个轮回我们与欺诈之人相遇--它们都彼此被困在自己的火焰之中。这一轮回的广度和深度或许超过了大部分人的预期。原因包括:向下兼容性。这里有大概20年的兼容问题需要考虑。如果你是一个新的使用者,你应该会认为这些粗糙的瑕疵应该被理顺而不管它是什么。如果一个新版本的R破坏了你之前可以成功运行的代码,你会有不同的想法。哪些较大的碎片已经被打平,但是仍然还有大量的小细节需要调节。R需要同时翻译 2016-08-03 18:11:39 · 430 阅读 · 0 评论 -
8.1 幽灵(no.1~no.10)
8.1 幽灵(no.1~no.10)===8.1.1 R和S+的不同之处R和S+有大量的不同之处。在R官网的FAQ板块已经说明(http://cran.r-project.org/faqs.html)。一部分,但不是所有的,也被提及。8.2.2 包的功能假设你看到了一条命令然后你想试试它,比如: fortune('dog')你试了一下得到了以下信息:Error: could not find fu翻译 2016-08-12 13:57:52 · 481 阅读 · 0 评论 -
8.3 魔鬼(no.31~no.32)
8.3 魔鬼(no.31~no.32)8.3.31 语法错误语法错误是个很常见的问题,尤其对于新的使用者。不幸的是除了令人费解之外,并没有好的方法来解决。最常见的问题是不匹配的括号、方括号,确实逗号。使用一个可以高亮语法的编辑器可以消除很多问题。这是一个特别讨厌的错误:> lseq <- seq(0, 1, 1ength=10)Error: unexpected input in "seq(0,翻译 2016-08-18 14:43:25 · 427 阅读 · 0 评论 -
8.3 魔鬼(no.21~no.30)
8.3 魔鬼(no.21~no.30)8.3.21 维度为11的数组数组的维度可以是任何正数(内存的模和向量长度限制)。特别的,维度为1也是可能的。它的长相和表现总是像一个平的向量。总是。这是个它们不是这样的例子:> df2 <- data.frame(x=rep(1, 3), y=tapply(1:9,factor(rep(c(’A’, ’B’, ’C’), each=3)), sum))> d翻译 2016-08-18 14:30:17 · 464 阅读 · 0 评论 -
8.3 魔鬼(no.11~no.20)
8.3 魔鬼(no.11~no.20)8.3.11 integrate中的非向量化函数integrate函数期待一个向量化的函数。当它给了一个长度是127的参数,它期望得到一个长度是127的答案。如果它没有得到它想要的,它就会表示它的不满:> fun1 <- function(x) sin(x) + sin(x-1) + sin(x-2) + sin(x-3)> integrate(fun1, 0翻译 2016-08-18 10:30:59 · 804 阅读 · 0 评论 -
8.3 魔鬼(no.1~no.10)
8.3 魔鬼(no.1~no.10)最最凶残的问题就是正确地在R中读取文件中的数据。8.3.1 read.table函数read.table是R获得数据最常用的方法。如果你用到read.table,将它的帮助文档阅读三次将是非常有效的时间安排。尤其是header和row.names两个参数应该被视为列名和行名。另外一个伟大的时间管理工具是在你尝试使用这些数据时对数据的结果进行检查。8.3.2 读一个翻译 2016-08-17 21:34:41 · 579 阅读 · 0 评论 -
8.2 喀迈拉(no.41~no.44)
8.2 喀迈拉(no.41~no.44)8.2.41 列明冲突这是一个期望受挫的例子:> one.col.mat <- cbind(matname=letters[1:3])> one.col.mat matname[1,] "a"[2,] "b"[3,] "c"> data.frame(x=one.col.mat) matname1 a2 b3 c> data.fr翻译 2016-08-17 16:48:55 · 496 阅读 · 0 评论 -
8.2 喀迈拉(no.31~no.40)
8.2 喀迈拉(no.31~no.40)8.2.31 subset函数subset是为了在交互使用中提供便利。在函数中使用时却经常造成不便和困扰。在使用函数时,使用下标,不要使用subset。病人:医生,当我做这个的时候就疼。 医生:那就不要做这个啊。这是一个subset在操作中的例子:> xdf5 <- data.frame(R=1:2, J=3:4, E=5:6, K=7:8)> subse翻译 2016-08-17 16:14:10 · 578 阅读 · 0 评论 -
8.2 喀迈拉(no.21~no.30)
8.2 喀迈拉(no.21~no.30)8.2.21 is.matrixis.matrix会造成惊喜,不仅因为在R和S+中会返回不同的答案。> is.matrix(1:3)[1] FALSE> is.matrix(array(1:3, c(3,1)))[1] TRUE> is.matrix(array(1:3, c(3,1,1)))[1] FALSE> is.matrix(array(1翻译 2016-08-17 10:59:47 · 496 阅读 · 0 评论 -
8.2 喀迈拉(no.11~no.20)
8.2 喀迈拉(no.11~no.20)8.2.11 is missing missing or missing?(翻译不了,自己意会吧)在因子中缺失值当然是有意义的。完全有可能是我们不知道这个特定的条目属于什么类型。> f1 <- factor(c(’AA’, ’BA’, NA, ’NA’))> f1[1] AA BA <NA> NALevels: AA BA NA> unclass(f1翻译 2016-08-16 17:24:26 · 673 阅读 · 0 评论 -
8.2 喀迈拉(no.1~no.10)
8.2 喀迈拉(no.1~no.10)8.2.1 数字到因子到数字一般情况下尽管因子不会涉及到数字,但是它们可以。在这种情况下,我们会有更多的困惑。> as.numeric(factor(101:103))[1] 1 2 3如果你期望这样:[1] 101 102 103好耻辱啊。如果你的因子代表数字,你要从因子里恢复这些数字,那么你需要一个曲线救国方案。as.numeric(as.charac翻译 2016-08-15 12:16:48 · 471 阅读 · 0 评论 -
8.2 喀迈拉
8.2 Chimeras 喀迈拉“谁把你带到了如此刺鼻的酱油里面?”没有其他类型的对象比因子制造的麻烦更多了。因子是对分类数据的实现方法。(”factor”这个名字本身就造成了麻烦—通过设计的实验展示给我们。)一个因子的核心数据是整型向量。类型是”factor”,并且有一个字符向量型的属性级别指示每个分类的身份。你或许已经意识到问题来了—数字对象在概念上并不是数字。但是R却努力按照你的想法进行存储:翻译 2016-08-15 09:35:29 · 360 阅读 · 0 评论 -
8.1 幽灵(no.61~no70)
8.1 幽灵(no.61~no70)8.1.61 错误的迭代(I)for循环的迭代可以适用于任何向量。这使循环比其他语言更加通用,但是也会使一些人困惑:nums <- seq(-1, 1, by=.01)ans <- NULLfor(i in nums) ans[i] <- i^2有两处错误。你应该意识到我们已经在第二轮回遇到过了(但失败了),ans的索引并不是我们期望的那样。最好这样做:nu翻译 2016-08-14 16:32:00 · 423 阅读 · 0 评论 -
8.1 幽灵(no.51~no.60)
8.1 幽灵(no.51~no.60)8.1.51 非数字参数> median(x)Error in median.default(x) : need numeric data如果你得到了一个这样的错误,很有可能x是一个因子类型。8.1.52 函数round偶数取整函数round()如果在数字的小数点最后是5就会取整到离这个数最近的整数(仅限于小数点后有一位)。一些人对此感到惊奇。我对他们感到惊翻译 2016-08-14 12:14:54 · 949 阅读 · 0 评论 -
8.1 幽灵(no.41~no.50)
8.1 幽灵(no.41~no.50)8.1.41 字符串不是名字(IV)一个公式可以很容易地由字符串创建:> myvars <- paste(’V’, 1:9, sep=’’)> myvars[1] "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8" "V9"> as.formula(paste(’y ~ ’, paste(myvars[c(3,5,8)],col翻译 2016-08-13 21:46:00 · 334 阅读 · 0 评论 -
8.1 幽灵(no.31~no.40)
8.1 幽灵(no.31~no.40)8.1.31 多重比较0 < x < 1看起来是个合理的方法来测试x是否在0和1之间。可R并不这么认为。R是这么想的:0 < x & x < 18.1.32 命名覆盖默认的T和F分别分配给TRUE和FALSE。然而,它们也可以被用来命名对象(S+中不可以)。你可以考虑一下建议:最好使用TRUE和FALSE,而不是T和F。最好不要使用T和F来给对象命名,以翻译 2016-08-13 15:30:22 · 494 阅读 · 0 评论 -
8.1 幽灵(no.21-no.30)
8.1 幽灵(no.21~no.30)8.1.21 没有部分匹配的任务部分匹配的一个最重要的副作用是当你做替换操作时使你变傻:> ll2 <- list(aa=1:3, bb=4:6)> ll2$b[1] 4 5 6> ll2$b <- 7:9> ll2$aa[1] 1 2 3$bb[1] 4 5 6$b[1] 7 8 9这也适用于数据框(毕竟数据框也是列表)。8.1.22 c翻译 2016-08-13 11:27:50 · 447 阅读 · 0 评论 -
8.1 幽灵(no.11~no.20)
8.1 幽灵(no.11~no.20)8.1.11 剔除命名的条目负号(-)可以让你剔除你不需要的条目:> xlet <- 1:6> names(xlet) <- letters[1:6]> xlet[-c(3,4)]a b e f1 2 5 6有时你更喜欢用名字而不是数字来实现剔除操作,但这是无效的(自然地):> xlet[-c(’c’, ’d’)]Error in -c("c", "翻译 2016-08-12 18:57:04 · 1505 阅读 · 0 评论 -
前言
摘要:亲爱的筒子,如果你正在使用R并且觉得你在地狱之中,这是给你的地图,五元一本. 本书中我不仅会告诉你们我在地狱中发现了什么,而且我还会告诉你们其他一些我看到的. 好,现在开场. 前戏上来,看官坐好. $#$%#$%^&**&^%$#@#$%^&*&^%$#$%^&*(*&^%$%^&*(........ 在翻译 2016-03-12 17:20:13 · 417 阅读 · 0 评论 -
<<The R Inferno中文版>>写在前面
无意之间在公司瀑布IM上,big boss分享了这本> ,下载下来随意看了看,亲切之感差一点boqi,纵观全书一节一问题,以作者在地狱之旅的形式展开,讲述了筒子们在使用R战斗中的很多细节问题.顿时就有一种想要翻译出来发扬一下开源精神的冲动.原谅我看到english还没有比看到female亲切,试着see一点translate点吧,在此以做分享... 就这样开始吧.翻译 2016-03-12 16:30:42 · 1471 阅读 · 0 评论 -
R语言中paste()中粘贴向量
因为num为一个向量,在paste函数中是对num进行拆分,分别进行paste而我想要的是这样的:于是采用for循环逐一paste:原创 2015-12-30 13:59:28 · 9973 阅读 · 1 评论 -
R语言判断向量中是否存在一个元素
判断ori_data[,1]中是否存在元素a:a %in% ori_data[,1]如果存在返回 true,否则返回 false原创 2015-12-14 14:18:40 · 39167 阅读 · 0 评论