Tag: r

编写健壮的R代码:命名空间,屏蔽和使用`::`运算符

简洁版本 对于那些不想通读我的“案例”的人来说,这就是本质: 什么是推荐的方法,尽量减less新包打破现有代码的机会,即使你写的代码尽可能健壮 ? 在什么时候最好地使用命名空间机制是推荐的方法 a)只使用贡献的软件包(比如在一些R分析项目中)? b)关于开发自己的软件包? 如何避免与正式类 (主要是参考类在我的情况下)的冲突,因为甚至没有一个类似于:: for classes(AFAIU)的命名空间机制? R宇宙的工作方式 这是在我脑海中徘徊了两年的东西,但我不觉得我已经达到了令人满意的解决scheme。 另外我觉得情况越来越糟。 我们看到在CRAN , github , R-Forge等等上的软件包数量不断增加,这真是太棒了。 在这样一个分散的环境中,组成R的代码库(为了简单起见,这就是基础R和贡献R )的代码基础在鲁棒性方面将偏离理想状态:人们遵循不同的惯例,有S3,S4 ,“S4参考课程”等等。如果有一个强制执行的“ 中央清算实例 ”,事情就不可能像“alignment”一样。 没关系。 问题 鉴于上述情况,使用R编写健壮的代码可能非常困难。 并非所有你需要的都在R基础上。对于某些项目,你最终会加载相当多的贡献包。 恕我直言,在这方面最大的问题是命名空间概念在R中使用的方式:R允许简单地写一个特定的函数/方法的名称,而不明确要求它的名称空间(即foo与namespace::foo ) 。 所以为了简单起见,这就是大家正在做的事情。 但是这样一来,名称冲突,破坏代码以及重写/重构代码的需要只是时间问题(或者加载的不同包的数量)。 充其量,你会知道哪些现有的function被新添加的软件包掩盖/重载。 最糟糕的是,你将不知道,直到你的代码中断。 几个例子: 尝试加载RMySQL和RSQLite的时候,他们不太一样 RMongo也会覆盖RMySQL的某些function 预测掩盖了许多与ARIMA相关的function方面的内容 R.utils甚至掩盖了base::parse例程 (我不记得哪些function特别是导致问题,但如果有兴趣,我愿意再看一遍) 令人惊讶的是,这似乎并没有打扰那里的很多程序员。 我试图在r-devel几次提高兴趣,没有任何意义。 使用::运算符的缺点 正如Dominick Samperi 指出的那样,使用::运算符可能会严重影响效率。 在开发你自己的包的时候,你甚至不能在自己的代码中使用::运算符,因为你的代码还没有真正的包,因此也没有名称空间。 所以我将不得不一直坚持foo方式,build立,testing,然后回去改变一切到namespace::foo 。 不是真的。 避免这些问题的可能解决scheme 将每个包中的每个函数重新分配给一个遵循特定命名约定的variables,例如namespace..foo ,以避免与namespace::foo (我在此概述一次)相关的低效率。 […]

R的不一致性:为什么add = T有时会起作用,有时不在plot()函数中?

为什么R与plot()函数中的add参数不一致? 它有时有效,有时不起作用! 在这个例子中,参数add=TRUE没有问题: plot(0:10, 0:10*3) plot(identity, add=TRUE, xlim=c(0,10)) plot(function (x) { sin(x)*10 }, add=TRUE, xlim=c(0,10)) 但是当我问题 plot(c(2, 3, 4), c(20,10,15), add=TRUE, pch="A") 它不工作! 它说“添加”不是一个graphics参数。 请不要写我应该使用points()来代替。 我知道我可以使用它。 我想了解R的奇怪行为 – 为什么它有时会起作用,有时候不行?

如何处理R中的hdf5文件?

我有一个hdf5格式的文件。 我知道它应该是一个matrix,但我想在R读取这个matrix,以便我可以研究它。 我看到有一个h5r软件包可以帮助解决这个问题,但是我没有看到任何简单的阅读/理解教程。 在线提供这样的教程吗? 具体来说,你如何读这个包的hdf5对象,以及如何实际提取matrix? UPDATE 我发现一个包装不是CRAN的一部分但是是BioConductoR的一部分的rhdf5。 界面相对比较容易理解文档,示例代码非常清晰。 我可以使用它没有问题。 我的问题似乎是input文件。 我想读取的matrix实际上是作为python pickle存储在hdf5文件中的。 所以每次我试图打开它并通过R访问它,我有一个segmentation fault 。 我弄清楚如何从python保存matrix作为tsv文件,现在解决了这个问题。

在ggplot2中,boxplot行的结尾代表什么?

我找不到一个boxplot的线条的终点描述。 例如,这里是行结束处的上面和下面的点值。 (我意识到箱子的顶部和底部是百分之二十五和百分之七十,中线是五十点)。 我假设,因为上面和下面有几个点,他们不代表最大值/最小值。

标题是variables名称时如何给ggplot添加标题?

在ggplot的结尾,这工作正常: + opts(title = expression("Chart chart_title…")) 但是这不是: chart_title = "foo" + opts(title = expression(chart_title)) 也没有这个: chart_title = "foo" + opts(title = chart_title) 如果标题是variables名称,我怎样才能将一个标题添加到ggplot?

rmarkdown:找不到pandoc:pdflatex

当我使用渲染{rmarkdown}从Mac上的.Rmd文件生成pdf文件时,出现错误消息 pandoc: pdflatex not found. pdflatex is needed for pdf output. Error: pandoc document conversion failed 但是,当我检查 pdflatex -v 我有 pdfTeX 3.1415926-2.4-1.40.13 (TeX Live 2012) kpathsea version 6.1.0 Copyright 2012 Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX). There is NO warranty. Redistribution of this software is covered by the terms of both the pdfTeX copyright and […]

子集和ggplot2

我有一个问题,用ggplot2绘制一个数据框的子集。 我的df就像: ID Value1 Value2 P1 100 12 P1 120 13 … P2 300 11 P2 400 16 … P3 130 15 P3 140 12 … 我现在如何绘制Value1和Value2仅用于ID P1和P3? 例如,我试过: ggplot(subset(df,ID=="P1 & P3") + geom_line(aes(Value1, Value2, group=ID, colour=ID))) 但我总是收到一个错误。 PS我也尝试了许多与P1和P3的组合,但我总是失败..

如何只读select从一个文件列到R? (`read.table`和`scan`之间的快乐媒介?)

我有一些非常大的分隔数据文件, 我只想处理R中的某些列,而不需要花费时间和内存为整个文件创build一个data.frame 。 我所知道的唯一select是read.table ,当我只想要几列或者scan ,这太浪费了。 有没有更好的select,无论是纯R或可能呼吁其他shell脚本进行列提取,然后使用扫描或read.table输出? (这导致了如何调用shell脚本并在R中捕获其输出的问题)。

如何将元素添加到R中的列表(循环)

我想添加元素到一个循环中的列表(我不知道究竟有多less) 喜欢这个: l <- list(); while(…) l <- new_element(…); 最后, l[1]是我的第一个元素, l[2]我的第二个元素,依此类推。 你知道如何进行?

获取所有参数作为列表

R是否提供了一个对象/函数/方法/关键字来获取所有的函数参数? 使用一个例子: function(a, b="default", …)将在函数环境中提供a和b以及… 是否有类似于list(…)的语句,在结果中也包含a和b ? 或者换一种方式: list(a=a, b=b, …)的简写,给定function(a, b, …)