小编eli*_*ing的帖子

为什么roxygen2不会自动更新DESCRIPTION文件中的"Imports"?

我正在努力密切关注@ hadley的书,以学习编写R包的最佳实践.我很高兴看到这些关于本书哲学的界限:

任何可以自动化的东西都应该是自动化的.尽可能少地用手做.尽可能多地使用功能.

因此,当我阅读NAMESPACE文件中的导入指令和DESCRIPTION文件中的"Imports:"字段之间的依赖关系和(某种)混淆差异时,我希望它能roxygen2自动处理它们.毕竟

NAMESPACE中提到的每个包装也必须出现在Imports或Depends字段中.

我希望roxygen2在我的函数中使用@import,并确保它包含在DESCRIPTION文件中.但它不会自动执行此操作.

所以我要么手动将它添加到DESCRIPTION文件中,要么几乎手动使用devtools::use_package.

寻找答案,我在SO中找到了这个问题,@ hadley在评论中证实了这一点

目前,命名空间roclet将修改NAMESPACE但不修改DESCRIPTION

和其他帖子(例如这里这里)collate_roclet讨论的地方,但" 这只有在你的代码有副作用时才有意义;最常见的是因为你正在使用S4 ".

我想知道:

  • 描述不是自动更新的原因(有点与前面提到的哲学相矛盾,可能与之相同roxygen2)和
  • 如果有人已经制定了一种方法来做到这一点

r roxygen2

20
推荐指数
1
解决办法
631
查看次数

ggplot2:geom_text使用geom_bar中的plot和force/fit文本调整大小

这实际上是两个问题中的一个(不确定是否违反SO规则,但无论如何).

第一个问题是我如何强迫一个geom_text适合geom_bar?(动态根据绘制的值)

环顾四周,我发现的解决方案正在改变标签的大小.这当然有效,但不适用于所有情况.您可以更改特定绘图的大小以使文本适合条形,但是当数据更改时,您可能需要再次手动更改文本的大小.我现实生活中的问题是,我需要为不断变化的数据(每日)生成相同的图,所以我无法真正手动调整每个图的大小.

我尝试将标签的大小设置为数据的函数.它有点工作,不完美,但适用于许多情况.

但这是另一个问题,即使标签适合栏内,重新调整情节会使一切变得混乱.调查一下,我也在ggplot文档中找到了

标签确实有高度和宽度,但它们是物理单位,而不是数据单位.它们在该绘图上占用的空间量在数据单位中不是恒定的:当您调整绘图大小时,标签保持相同的大小,但轴的大小会发生变化.

这让我想到了第二个问题:是否可以更改此默认行为并让/使图表调整大小?

还让我提炼我的第一个问题.是否可以强制a geom_text适合a geom_bar,使用物理单位和数据单元之间的聪明关系动态设置文本的大小?

所以,为了遵循良好的做法,这是我可重复的例子:

set.seed(1234567)
data_gd <- data.frame(x = letters[1:5], 
                      y = runif(5, 100, 99999))

ggplot(data = data_gd,
       mapping = aes(x = x, y = y, fill = x)) +
    geom_bar(stat = "identity") +
    geom_text(mapping = aes(label = y, y = y/2))
Run Code Online (Sandbox Code Playgroud)

此代码生成此图:

在此输入图像描述

如果我只是简单地调整绘图大小," 标签保持相同的大小,但轴的大小会发生变化 ",从而使标签适合条形图(现在标签甚至可能太小).

在此输入图像描述

所以,这是我的第二个问题.标签调整大小并保持纵横比相对于条形图会很好.任何想法如何实现这一点或是否有可能?

好的,但回到如何在条形图中标注标签,最简单的解决方案是设置标签的大小.

ggplot(data = data_gd,
       mapping = aes(x = x, y = y, fill = x)) +
    geom_bar(stat = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 geom-bar geom-text ggproto

15
推荐指数
2
解决办法
4285
查看次数

MS Word跟踪更改和RMarkDown

我尝试使用R Markdown编写所有数据分析报告,因为我可以拥有一个可重现的文档,我可以用几种输出格式(Pdf,html和MS Word)共享.

但是,我的大多数同事使用MS Word,他们不知道R,Markdown等.

使用R Markdown的一个优点是我可以在MS Word中生成我的报告并直接与我的同事共享.

缺点是协作对我来说变得很麻烦,因为我也收到关于MS Word的反馈(通常使用跟踪更改),我必须手动将这些更改重新引入.rmd文件.

所以,我的问题是:如何简化将MS Word文档中的更改导入.Rmd的过程(即尽可能自动化)?

有没有可以帮助我的工具?

让我的同事成为R-literate并不是一种选择:(

r r-markdown

13
推荐指数
1
解决办法
1498
查看次数

使用`dplyr`创建仅为数据子集定义的新变量

考虑这个示例数据:

set.seed(1234567)
mydf <- data.frame(var1 = runif(10), var2 = c(runif(5), rep(NA, 5)))
Run Code Online (Sandbox Code Playgroud)

这个示例矢量化函数,不幸的是,只要其中一个参数发生错误就会触发错误 NA

myfn <- function(x, y){
    sum(x:y)
}
myfn <- Vectorize(myfn)
Run Code Online (Sandbox Code Playgroud)

现在,在dplyr链的中间我需要使用创建一个新变量myfn.这个新变种(var3)只在定义var1var2NA.

因此,类似情况的最常见解决方案是使用ifelse.像这样的东西.

mydf %>%
    mutate(var3 = ifelse(
        test = is.na(var2), 
        yes = NA, 
        no = myfn(var1, var2)))
Run Code Online (Sandbox Code Playgroud)

但是,这并不在我的情况下工作,因为ifelse反正实际上通过全矢量var1var2,以myfn和而不仅仅是当子向量testFALSE.而这一切都休息,因为myfn每当接收到一个断裂NA.

那么,这个聪明的dplyr解决方案是什么?(我可以在不使用的情况下考虑许多解决方案dplyr,但我只是对dplyr友好的解决方案感兴趣)

在我看来,它filter …

r dplyr

8
推荐指数
2
解决办法
793
查看次数

对函数内部的ggplot2进行惰性求值

我主要ggplot2用于可视化.通常,我以交互方式设计绘图(即ggplot2使用NSE的原始代码),但最后,我经常最终将该代码包装到接收要绘制的数据和变量的函数中.这总是有点噩梦.

所以,典型情况看起来像这样.我有一些数据,我为它创建了一个图(在这种情况下,一个非常非常简单的例子,使用随附的mpg数据集ggplot2).

library(ggplot2)
data(mpg)

ggplot(data = mpg, 
       mapping = aes(x = class, y = hwy)) +
    geom_boxplot() + 
    geom_jitter(alpha = 0.1, color = "blue")
Run Code Online (Sandbox Code Playgroud)


当我完成绘图设计时,我通常希望将它用于不同的变量或数据等.所以我创建了一个函数,接收绘图的数据和变量作为参数.但是由于NSE,它并不像编写函数头那样容易,然后复制/粘贴和替换函数参数的变量.这不起作用,如下所示.

mpg <- mpg
plotfn <- function(data, xvar, yvar){
    ggplot(data = data, 
           mapping = aes(x = xvar, y = yvar)) +
    geom_boxplot() + 
    geom_jitter(alpha = 0.1, color = "blue")
}
plotfn(mpg, class, hwy) # Can't find object

## Don't know how to automatically pick scale for object of type function. …
Run Code Online (Sandbox Code Playgroud)

r lazy-evaluation ggplot2

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

每月日期的顺序,确保它是同一天,或在无效的情况下的最后一天

给定一个初始日期,我想生成一个月度间隔的日期序列,确保每个元素与初始日期或月份的最后一天具有相同的日期,以防同一天产生无效日期.

听起来很标准,对吧?

使用difftime是不可能的.这是帮助文件的difftime说法:

诸如"月"之类的单位是不可能的,因为它们不是恒定的长度.要创建月,季度或年的间隔,请使用seq.Date或seq.POSIXt.

但随后查看seq.POSIXt我的帮助文件,发现:

使用"月份"首先提前一个月而不更改日期:如果这导致该月的无效日期,则向前计入下个月:请参阅示例.

这是帮助文件中的示例.

seq(ISOdate(2000,1,31), by = "month", length.out = 4)
> seq(ISOdate(2000,1,31), by = "month", length.out = 4)
[1] "2000-01-31 12:00:00 GMT" "2000-03-02 12:00:00 GMT" 
"2000-03-31 12:00:00 GMT" "2000-05-01 12:00:00 GMT"
Run Code Online (Sandbox Code Playgroud)

因此,鉴于初始日期是在第31天,这将在2月,4月等产生无效日期.因此,序列最终实际上跳过那些月份,因为它"向前计数"并最终在3月02日结束,而不是二月-29.

如果我从2000-01-31开始,我希望序列如下:

  • 2000-01-31
  • 2000-02- 29
  • 2000年3月31日
  • 2000-04-30
  • ...

它应该正确处理闰年,所以如果初始日期是2015-01-31,那么序列应该是:

  • 2015年1月31日
  • 2015-02- 28
  • 2015年3月31日
  • 2015年4月30日
  • ...

这些只是用来说明问题的例子,我不提前知道初始日期,也不能假设它.初始日期可能在月中(2015-01-15),在这种情况下seq工作正常.但是,正如在示例中那样,在月末使用seq单独使用会产生问题(第29,30和31天)也是如此.我不能假设初始日期是该月的最后一天.

我环顾四周试图寻找解决方案.在SO中的一些问题中(例如这里)有一个"技巧"来获得一个月的最后一天,通过获取下个月的第一天并简单地减去1.并且找到第一天是"容易的",因为它就在第一天.

所以到目前为止我的解决方案是

# Given an initial date for my sequence
initial_date <- as.Date("2015-01-31")

# Find the first day of …
Run Code Online (Sandbox Code Playgroud)

r seq

6
推荐指数
1
解决办法
1032
查看次数

RStudio Viewer窗格中的两个dygraph

是否可以dygraph在RStudio Viewer窗格中同时查看两个?

我正在更新一个旧函数,它生成两个时间序列图(使用ggplot2),一个堆叠在另一个上面(使用gridExtra::grid.arrange(ggp1, ggp2)).我想使用酷dygraph,改变非常简单,...,除了我想在RStudio Viewer窗格中同时查看两个图.

可以一次查看一个图.实际上,"如果你dygraph在RStudio中调用,那么它的输出就会出现在Viewer窗格中".但我无法找到同时显示两个图的技巧.我希望如此,因为我想使用方便的同步功能dygraph

为了一个可重复的例子,这里是我正在做的一个例子.

library(dygraphs)   
dygraph(mdeaths, group = "ensync")
dygraph(fdeaths, group = "ensync")
Run Code Online (Sandbox Code Playgroud)

但是这些中的每一个都是R控制台中的新调用,然后第一个绘图显示在查看器上,第二个绘图立即替换它.

我找到的唯一解决方法是将它放在RMarkdown文档中并编织所有内容.但我有点不喜欢这种做法.对我直接在RStudio Viewer窗格中显示它会更方便.

有任何想法吗?

r rstudio dygraphs

6
推荐指数
2
解决办法
1667
查看次数

映射所有参数的组合[R]

考虑这个玩具函数接收3个参数:

toy <- function(x, y, z){
    paste(x, y, z)
}
Run Code Online (Sandbox Code Playgroud)

对于每个参数,我都有许多值(每个参数不一定是相同的数字),并且我想将该toy函数应用于这些参数的不同组合。

所以我想,好的,让我们使用apply函数的多元版本mapply

mapply(FUN = toy, x = 1:2, y = c("#", "$"), z = c("a", "b"))

[1] "1 # a" "2 $ b"
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的。实际上,根据帮助,mapply“将FUN应用于每个...自变量的第一个元素,第二个元素,第三个元素,依此类推”。我想要的是将FUN应用于所有参数的所有不同组合。

所以,代替

[1] "1 # a" "2 $ b"
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

[1] "1 # a" "1 # b" "1 $ a" "1 $ b" "2 # a" "2 # b" "2 $ a" "2 $ b"
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是这样做的聪明方法是什么?

当然,我可以事先准备组合并为其安排参数,mapply以便它们包括-rowwise-所有组合。但是我只是认为这可能是一个相当普通的任务,并且在应用族内部可能已经有一个功能可以做到这一点。

r mapply

5
推荐指数
1
解决办法
786
查看次数

R中`str()`的替代

或许只是我一个人,却总觉得str不尽如人意。它通常过于冗长,但在许多情况下却没有提供太多信息。

我真的很喜欢函数 ( ?str)的描述:

简洁地展示一个R对象的内部结构

尤其是这一点

理想情况下,每个“基本”结构只显示一行。

只是,在许多情况下,默认str实现根本不符合这种描述。

好吧,假设它对data.frames部分有好处。

library(ggplot2)
str(mpg)

> str(mpg)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   234 obs. of  11 variables:
 $ manufacturer: chr  "audi" "audi" "audi" "audi" ...
 $ model       : chr  "a4" "a4" "a4" "a4" ...
 $ displ       : num  1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
 $ year        : int  1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
 $ cyl         : …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
2975
查看次数

使用 visNetwork R 包进行类似思维导图的布局(使用 vis.js javascript 库的网络可视化)

是否可以调整 visNetwork 的选项(例如 visLayout、visOptions 或 visPhysics)以获得类似于思维导图的网络可视化?

我想获得这样的东西: 使用 Mindomo 制作

这是我用来绘制相同数据的可重现R示例visNetwork

nodes <- structure(list(id = 1:22, label = structure(c(14L, 20L, 19L, 
                                                       16L, 12L, 18L, 2L, 17L, 22L, 8L, 13L, 3L, 4L, 5L, 6L, 7L, 21L, 
                                                       15L, 9L, 1L, 10L, 11L), .Label = c("A seemengly impossible mission\n", 
                                                                                       "Another \n", "Detail 1\n", "Detail 2\n", "Detail 3\n", "Detail 4\n", 
                                                                                       "Detail 5\n", "Do you know where is Dover?\n", "Dover Castle\n", 
                                                                                       "Finally, I'm the fifth\n", "I'm alone", "I'm relatively short\n", 
                                                                                       "Let's say there is …
Run Code Online (Sandbox Code Playgroud)

r vis.js

4
推荐指数
1
解决办法
2026
查看次数