小编Pau*_*aul的帖子

如何在 R Notebook 中获取控制台输出并并排绘图?

在 R Notebook 中,有一个函数可以在控制台中绘制许多图并打印摘要统计数据。我想在 HTML 输出上并排获得绘图和控制台输出(即摘要统计数据)。

这是一个非常简单的例子:

---
title: "Example"
output: html_notebook
---


```{r}
mapply(FUN = function(.x) {
  plot(.x)
  summary(.x)
}, split(iris, iris$Species), SIMPLIFY = FALSE)
```
Run Code Online (Sandbox Code Playgroud)

上述代码的输出如下所示:

在此输入图像描述

正如您所看到的,绘图是一个接一个的,控制台输出位于中间的某个位置。

预期输出如下:

在此输入图像描述

我浏览了这些SO主题但没有成功:

请注意,我真的想获取控制台输出,如果可能的话,我想避免使用许多转换来获取 grob 或图片,因为有时,我的实际输出的相关方法不存在。不使用 R Notebook 而是使用 RMarkdown 也可以。

layout plot r r-markdown rnotebook

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

渲染多个 Rmarkdown 报告时出现 Pandoc 错误 1033

我有r一个包含循环的脚本,我在其中调用rmarkdown::render()以创建多个 HTML 报告。该过程运行良好,直到我开始生成更大的报告文件(这让我想到了内存问题......)。

几次成功迭代后,该过程停止并在 R 控制台中显示以下消息:Error: pandoc document conversion failed with error 1033

以下是该render()函数在循环中的使用方式:

for (i in 1:length(random_vector)) {
  id = random_vector[i]

  knitr::knit_meta(class=NULL, clean = TRUE) # does not prevent the problem

  rmarkdown::render("my_rmd_file_that_generates_reports.Rmd", 
                    output_file = paste(id_fiche, "report.html"))

}
Run Code Online (Sandbox Code Playgroud)

此处未提及此错误:https : //pandoc.org/help.html并且与此错误不对应:https : //github.com/jgm/pandoc/issues/1033。这里提到的想法rmarkdown::render() 在循环中 - 无法使用这一行分配大小的向量knitr::knit_meta(class=NULL, clean = TRUE)没有解决这个问题。

注意:我不能给出一个可重复的例子,因为我不知道问题的确切根源,我希望有人遇到同样的问题并找到解决它的方法。

会话信息:

R 版本 3.6.0 (2019-04-26)

平台:x86_64-w64-mingw32/x64(64位)

在以下环境下运行:Windows 10 x64(内部版本 18362)

[编辑] 这是我正在使用的 …

r pandoc r-markdown

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

当数据为POSIXct时,ggplotly()不显示geom_vline / geom_hline

我正在尝试制作带有“时间标记”的图形。这些时间标记是某些日期的垂直线。时间数据是POSIXct格式。我想使用Plotly的出色交互界面,并在其中使用ggplot对象。

问题是在使用ggplotly()之后,这些“时间标记”没有显示出来。我已经尝试过了,plotly::add_segments()但是没有用。这是两个可复制的示例:

1.使用非POSIXct数据可以正常工作

# dummy dataset
df2 = data.frame(id = 1:10, measure = runif(10, 0, 20))
events2 = data.frame(number = c(2,3,8))
# ggplot graph
p2 = ggplot() + geom_line(data = df2, aes(x = id, y = measure))  +
  geom_vline(data = events2, aes(xintercept = events2$number), color = "red")
p2
# plotly graph that displays the geom_vline properly
ggplotly(p2)
Run Code Online (Sandbox Code Playgroud)

2.使用POSIXct时,数据无法显示正确的结果

# dummy dataset
df = data.frame(date = seq(as.POSIXct("2017-07-01", tz = "UTC", format = "%Y-%m-%d"),
                           as.POSIXct("2018-04-15", tz = "UTC", format = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 posixct plotly geom-vline

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

当绘图未渲染时,Shiny 会保留空白空间

上下文:一个闪亮的应用程序允许用户选择显示或不显示表格和图表。

问题:如果未显示绘图,UI 会为绘图保留一个大的白色“占位符”空间(不希望出现此行为)。但是,当涉及到表格时,UI 不会显示这个空白区域(预期行为)。

问题:如何防止 Shiny 为绘图保留空占位符?

先前的研究:这个问题已经在这里被问过,但@the-mad-statter 的答案不符合我的需要。我想了解为什么 Shiny 有这种行为,如果可能的话,在不更改 UI 的情况下纠正它。

非常感谢您的帮助!请在下面找到一个可重现的示例和一些屏幕截图。

可重现的例子

library(shiny)
library(tidyverse)

# basic user interface
ui <- fluidPage(
    checkboxGroupInput(inputId = "checkboxes", label = NULL ,choices = list("Plot"="plot", "Table"="table")),
    plotOutput(outputId = "plotdf1"),
    tableOutput(outputId = "tabledf"),
    plotOutput(outputId = "plotdf2")
)

# server side calculations
server <- function(input, output, session) {
    df = mtcars
    output$plotdf1 = renderPlot({
      if("plot"%in%input$checkboxes){
      ggplot(data = df, aes(x = disp, y = qsec)) +
        geom_line()
      }
    }) …
Run Code Online (Sandbox Code Playgroud)

r shiny

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

如何在不使用列名的情况下在flextable对象中指定大标记分隔符?

上下文:我正在使用 Awesome package 创建 .docx 表flextable。该包具有在最终输出中格式化数字的功能:set_formatter_type()。如果我理解正确的话,这个函数需要一个可以被使用的字符输入sprintf()。我能够使用以下命令实现预期的输出set_formatter(),但需要明确命名每一列,而我无法对真实的表执行此操作。

问题:我无法找到如何使用sprintf()flextable::set_formatter_type().

可以使用以下命令实现正确的格式设置formatC(),但此功能不适用于flextable::set_formatter_type()

formatC(x = signif(1715235456.5684, 3), big.mark = " ", digits = 0, format = "f")
[1] "1 720 000 000"
Run Code Online (Sandbox Code Playgroud)

使用sprintf()我能够实现:

 sprintf("%.0f", signif(1715235456.5684, 3))
[1] "1720000000"
Run Code Online (Sandbox Code Playgroud)

可重现的例子:

df <- flextable::flextable(iris[1:3]*1000)
flextable::set_formatter_type(df, fmt_double = "%.0f") # works fine but I can't get big mark separator
flextable::set_formatter_type(df, fmt_double = function(x) formatC(x, digits = 0, big.mark = …
Run Code Online (Sandbox Code Playgroud)

printf r flextable

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

每条面线具有不同 y 轴的 ggplot2 面:如何从facet_grid 和facet_wrap 中获得“最佳”?

上下文:我有一个数据框,其中Type记录了两个类别的数字列(concuptake下面的示例中)。根据我的真实数据,我需要绘制如下所示的多面图。

问题:设置scales = "free_y"不会“释放”同一行的各个面的 y 比例事实上,当类别的值conc远大于类别的值时uptake,后者会被“压垮”。

问题:是否可以使用facet_grid()或更改facet-label来释放同一行的facet的y轴刻度facet_wrap()以匹配那些facet_grid()

试验和错误:我已经尝试过facet_wrap(),但没有实现facet_grid()y 轴刻度良好的整齐布局。也许有一种方法可以定义facet_wrap()分面标签,但使用switch strip_position)参数并没有成功。

我知道一些SO帖子已经在寻找类似的东西(参见如何在facet_wrap中定位条带标签,就像在facet_grid中一样),但也许(我希望^^)另一个,也许“更简单”的解决方案出现了。

library(magrittr) # for %>%
library(tidyr) # for pivot longer
library(ggplot2)
df <- CO2 %>% pivot_longer(cols = c("conc", "uptake"))
# nice facet labels but bad y-axis
ggplot(data = df, aes(x = Type, y = …
Run Code Online (Sandbox Code Playgroud)

r facet ggplot2

3
推荐指数
1
解决办法
2945
查看次数

如何更改 Facet 标题中显示的 POSIXct 对象?

我正在尝试使用facet_grid()创建一个ggplot2图。每个方面都必须有一个日期(这里是 POSIXct 对象),我想更改它的显示方式。

我如何控制 POSIXct 对象在 ggplot2 分面标题中显示的方式?

例如:这就是它的显示方式:“2019-03-29”,这是我希望看到的写法:“29/03/2018”

我已经看过 labeller 函数,但我不知道如何使用它来更改 POSIXct 对象显示的方式。也许我错过了一些东西。我知道构面标签可以“手动”更改,但在这里我想要一个适用于任何 POSIXct 对象的解决方案。

# create a dummy dataframe named ex
ex = structure(list(date = structure(c(1510531200, 1510531200, 1522195200, 
                                  1522195200), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
               cat = c("a", "b", "a", "b"), measure = c(0.0777420913800597, 
                                                        0.71574708330445, 0.725231731543317, 0.217509124660864)), row.names = c(NA, 
                                                                                                                                -4L), vars = "date", indices = list(0:1, 2:3), group_sizes = c(2L, 
                                                                                                                                                                                               2L), biggest_group_size = 2L, labels = structure(list(date = structure(c(1510531200, 
                                                                                                                                                                                                                                                                        1522195200), class = c("POSIXct", "POSIXt"), tzone = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 posixct

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

将参数传递给 R 中的被调用函数的问题

语境:我想使用的功能(来电者调用其他功能()被调用者)。每个被调用函数都使用一组参数,这些参数可以从一个函数到另一个函数不同。

问题:似乎我必须在调用者函数中使用参数才能将它们传递给被调用者函数(请参见fun_d下面的示例)。

问题:如何使用省略号来避免在调用函数中使用显式参数?

在嵌套函数中使用省略号在不使用参数时运行具有多个参数的函数似乎没有回答这个问题(或者我理解不正确)。

代表:

# fun_a and fun_b have the same set of argument but do not do the same things with them
fun_a <- function(x, y, ...){x+y}
fun_b <- function(x, y, ...){x-y}

# I would like to use fun_a and fun_b in another function (fun_c) AND, have the possibility to 
# give different values for each argument of fun_a and fun_b (ex: y1 and y2)

# …
Run Code Online (Sandbox Code Playgroud)

r function ellipsis

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