小编And*_*rie的帖子

如何制作一个很好的R可重复的例子

在与同事讨论性能,教学,发送错误报告或在邮件列表上搜索指导时,以及在Stack Overflow上,通常会询问可重复的示例并始终提供帮助.

您有什么建议创建优秀示例的提示?如何以文本格式粘贴中的数据结构?您还应该包含哪些其他信息?

在另外还有其他招数来使用dput(),dump()structure()?你什么时候应该包括library()require()声明?其中保留字应避免一个,此外c,df,data等?

怎样才能成为一位伟大的重复的例子?

r r-faq

2474
推荐指数
23
解决办法
28万
查看次数

如何在R中将数字格式化为百分比?

曾经困扰我作为R的新事物的一件事是如何将数字格式化为打印的百分比.

例如,显示0.1234512.345%.我有很多解决方法,但这些似乎都没有"新友好".例如:

set.seed(1)
m <- runif(5)

paste(round(100*m, 2), "%", sep="")
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"

sprintf("%1.2f%%", 100*m)
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
Run Code Online (Sandbox Code Playgroud)

问题:是否有基本的R函数来执行此操作?或者,是否有广泛使用的包提供方便的包装?


尽管在这里搜索了类似的东西?format,?formatC并且?prettyNum我还没有在基础R中找到一个适当方便的包装器, ??"percent"但没有产生任何有用的东西. library(sos); findFn("format percent")返回1250次点击 - 所以再次没用. ggplot2有一个功能,percent但这不能控制舍入精度.

formatting r

116
推荐指数
8
解决办法
18万
查看次数

用R中的ggplot2覆盖直方图

我是R的新手,我试图将3个直方图绘制在同一个图表上.一切都很好,但我的问题是你没有看到2个直方图重叠的位置 - 它们看起来相当截止:直方图

当我制作密度图时,它看起来很完美:每条曲线都被黑色框线包围,颜色在曲线重叠的地方看起来不同:密度图

有人可以告诉我,如果第一张照片中的直方图可以实现类似的东西吗?这是我正在使用的代码:

lowf0 <-read.csv (....)
mediumf0 <-read.csv (....)
highf0 <-read.csv(....)
lowf0$utt<-'low f0'
mediumf0$utt<-'medium f0'
highf0$utt<-'high f0'
histogram<-rbind(lowf0,mediumf0,highf0)
ggplot(histogram, aes(f0, fill = utt)) + geom_histogram(alpha = 0.2)
Run Code Online (Sandbox Code Playgroud)

提前感谢任何有用的提示!

r ggplot2

114
推荐指数
3
解决办法
13万
查看次数

读取固定宽度的文本文件

我正在尝试将这个丑陋格式的数据集加载到我的R会话中:http: //www.cpc.ncep.noaa.gov/data/indices/wksst8110.for

Weekly SST data starts week centered on 3Jan1990

Nino1+2      Nino3        Nino34        Nino4
Week          SST SSTA     SST SSTA     SST SSTA     SST SSTA 
03JAN1990     23.4-0.4     25.1-0.3     26.6 0.0     28.6 0.3 
10JAN1990     23.4-0.8     25.2-0.3     26.6 0.1     28.6 0.3 
17JAN1990     24.2-0.3     25.3-0.3     26.5-0.1     28.6 0.3
Run Code Online (Sandbox Code Playgroud)

到目前为止,我可以阅读这些内容

  x = readLines(path)
Run Code Online (Sandbox Code Playgroud)

但是文件混合了"空格"和" - "作为分隔符,我不是正则表达式专家.我感谢任何有关将其变成一个漂亮而干净的R数据框架的帮助.谢谢!

r fixed-width

85
推荐指数
5
解决办法
7万
查看次数

R中的copy-on-modify语义到底是什么,以及规范源在哪里?

每隔一段时间我就会遇到R具有复制修改语义的概念,例如在Hadley的devtools wiki中.

大多数R对象具有复制修改语义,因此修改函数参数不会更改原始值

我可以将这个术语追溯到R-Help邮件列表.例如,Peter Dalgaard在20037月写道:

R是一种函数式语言,具有惰性求值和弱动态类型(变量可以随意更改类型:a < - 1; a < - "a"是允许的).从语义上讲,一切都是复制修改,尽管在实现中使用了一些优化技巧来避免最严重的低效率.

同样,Peter Dalgaard在20041月写道:

R具有复制修改语义(原则上,有时在实践中),因此一旦对象的一部分发生变化,您可能必须在新的位置查找包含它的任何内容,包括可能的对象本身.

更进一步,20002月, Ross Ihaka说:

我们付出了相当多的努力来实现这一目标.我会将语义描述为"复制修改(如有必要)".仅在修改对象时才进行复制.(如果需要)部分意味着如果我们可以证明修改不能改变任何非局部变量,那么我们就可以继续修改而不需要复制.

它不在手册中

无论我搜索多么努力,我都无法在R手册中找到"复制修改"的参考,无论是在R语言定义还是在R Internals中

我的问题有两个部分:

  1. 这在哪里正式记录?
  2. 复制修改如何工作?

例如,谈论"传递引用"是否合适,因为承诺传递给函数?

r pass-by-reference pass-by-value

71
推荐指数
2
解决办法
6008
查看次数

什么时候在R编程中使用S4方法是有回报的

我在专业环境中定期在R中编程,我也为客户或同事编写包.这里的一些程序员具有Java背景,并坚持使用S4方法以面向对象的方式做所有事情.另一方面,我的经验是,在尝试让代码按照您希望的方式执行操作时,S4实现通常会更糟,并且会导致更多的麻烦.

我绝对同意,在某些情况下,您必须能够以受控方式构造复杂对象或附加现有对象.但大多数时候,S4实现也可以使用经典列表轻松完成,没有像定义standardGeneric,方法,构造函数,初始化器等那样麻烦.

你什么时候考虑为R编写S4实现?

编辑:为了清楚起见,我非常感谢R.OOP中的答案和关于OO的讨论可以在R中以多种方式完成,但我的问题实际上是针对特定使用S4方法的附加值.

oop methods r s4

68
推荐指数
7
解决办法
4529
查看次数

控制ggplot2图例显示顺序

有谁知道如何控制ggplot2中的图例排序?

从我可以看到,订单显示与实际比例标签相关,而不是比例声明顺序.更改比例标题会改变顺序.我用钻石数据集做了一个小例子来强调这一点.我正在尝试将ggplot2用于一系列图表,我想让一个变量出现在右边的所有图表中.目前虽然这只发生在其中一些,但我在如何强制执行我想要的订购同时保留适当的比例标签时不知所措.

library(ggplot2)
diamond.data <- diamonds[sample(nrow(diamonds), 1000), ]
plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top", legend.box = "horizontal")
plot # the legend will appear shape then colour 
plot + labs(colour = "A", shape = "B") # legend will be colour then shape
plot + labs(colour = "Clarity", shape = "Cut") # legend will be shape then colour
Run Code Online (Sandbox Code Playgroud)

r ggplot2

68
推荐指数
2
解决办法
2万
查看次数

用先前估计的值重新开始混合效应模型估计

我正在使用lmer()lme4来估计混合效果模型.这很有效,但现在我想在固定数量的迭代中运行估算过程,然后通过指定由上一个估算过程计算的起始值来恢复过程.

根据这方面的帮助,?lmer可以通过设置参数:

  • start- 这些是新的起始值,根据帮助,可以ST从拟合模型中提取槽中的值并使用这些值,即使用x@ST
  • maxiter - 作为命名参数提供给 control

因此,例如,假设我想要lme使用iris数据,可以尝试这样做:

library(lme4)

# Fit model with limited number of iterations

frm <- "Sepal.Length ~ Sepal.Width | Species"

x <- lmer(frm, data=iris, 
          verbose=TRUE, control=list(maxIter=1), model=FALSE)

# Capture starting values for next set of iterations
start <- list(ST=x@ST)

# Update model
twoStep <-  lmer(frm, data=iris, 
          verbose=TRUE, control=list(maxIter=100), model=TRUE, 
          start=start)
Run Code Online (Sandbox Code Playgroud)

这有效.看一下输出,其中第一列是REML,即随机效应最大似然.特别注意模型2中的REML从模型1终止的地方开始:

> x <- lmer(frm, data=iris, 
+           verbose=TRUE, control=list(maxIter=1), …
Run Code Online (Sandbox Code Playgroud)

r lme4 mixed-models lmer

68
推荐指数
1
解决办法
2680
查看次数

连接路径的功能?

是否存在连接路径的现有功能?

我知道这并不难实现,但仍...除了照顾尾随/(或\)我需要(我们是否写即照顾适当的操作系统路径格式检测C:\dir\file/dir/file).

正如我所说,我相信我知道如何实施它; 问题是:我应该这样做吗?现有R包中是否已存在功能?

r concatenation path

55
推荐指数
2
解决办法
3万
查看次数

新参考类的意义是什么?

显然,John Chambers 在版本2.12中将R的Reference Classes添加到了R中.网上似乎没有太多的信息,但他们称之为R5课程,这意味着他们与S3和S4课程处于同一水平.

问题:什么是引用类,它如何适应现有的类类型?

r reference-class

47
推荐指数
1
解决办法
7953
查看次数