Shiny flexdashboard 中的facet_grid 给出错误“分面变量必须至少有一个值”

2023-11-29

我在获取 ggplot2 时遇到一些问题facet_grid评估系统的绘图。该图渲染良好,但我在浏览器和控制台中收到以下错误:

错误:分面变量必须至少有一个值

每次我根据输入切换品牌条目时都会发生这种情况input$brand。应用程序不会崩溃,但错误消息很烦人。

我准备了这个可重现的示例:

---
title: "Power ranking for mtcars"
runtime: shiny
output:
  flexdashboard::flex_dashboard:
    orientation: rows
    source_code: embed
---



```{r rows.print = 25}
library(dplyr)
library(ggplot2)

mtcars_tidy <- mtcars %>% 
    tibble::rownames_to_column() %>% 
    rename(model = rowname) %>% 
    mutate(brand = gsub( " .*$", "", model )) %>% 
    mutate(model = model) %>% 
    select(brand, model,  everything())  %>% 
    tidyr::gather(key = 'measure', value = "value", mpg:carb) %>%
    mutate(ranking = as.factor(sample(x = c(1, 2, 3), size = n(), replace = TRUE))) %>%

    mutate(power = case_when(
        .$measure == "hp" & value > 200 | (.$measure == "cyl" & value == 8) ~ "high",
        .$measure == "hp" & value < 200 | (.$measure == "cyl" & value == 8) ~ "medium",
        .$measure == "hp" & value > 100 | (.$measure == "cyl" & value == 6) ~ "high",
        .$measure == "hp" & value < 100 | (.$measure == "cyl" & value == 6) ~ "medium",
        .$measure == "hp" & value > 50  | (.$measure == "cyl" & value == 6) ~ "high",
        .$measure == "hp" & value < 50  | (.$measure == "cyl" & value == 6) ~ "medium",

        .$measure == "hp" & value > 200 | (.$measure == "carb" & value >  4) ~ "high",
        .$measure == "hp" & value < 200 | (.$measure == "carb" & value <= 4) ~ "medium",
        .$measure == "hp" & value > 100 | (.$measure == "carb" & value >  2.8) ~ "high",
        .$measure == "hp" & value < 100 | (.$measure == "carb" & value <= 2.8) ~ "medium",
        .$measure == "hp" & value > 50  | (.$measure == "carb" & value > 2) ~ "high",
        .$measure == "hp" & value < 50  | (.$measure == "carb" & value <= 2) ~ "medium",
        TRUE ~ "low"
    )) 
```

# Sidebar {.sidebar data-width="350"}

```{r}
selectInput("brand", "Brand of the car", 
            choices = unique(mtcars_tidy$brand))

renderUI({
    selectInput("model", "Car model",
                choices = mtcars_tidy$model[mtcars_tidy$brand == levels(mtcars_tidy$brand)[1]])
})

br()

observe({
    brand <- input$brand
    updateSelectInput(session, "model", 
                      choices = mtcars_tidy$model[mtcars_tidy$brand == brand])
})    


# when switching the brand of the car, input$brand this error pops up:
# Error in : Faceting variables must have at least one value
```


# Main

##

### Plot power ranking for each measure

```{r}
nameorder <- make.unique(mtcars_tidy$measure[order(mtcars_tidy$power, mtcars_tidy$ranking)])
mtcars_tidy$measure <- factor(mtcars_tidy$measure, levels=nameorder, 
                                   ordered = TRUE)

dataset <- reactive({
    subset(mtcars_tidy, brand == input$brand & model == input$model) 
})


renderPlot({
    ggplot(dataset(), aes(x = ranking, y = measure)) +
        geom_segment(aes(yend = measure), xend=0, color = "grey50") +
        geom_point(size = 3, aes(colour = power)) +
        scale_colour_brewer(palette="Set1", limits = c("high","medium", "low")) +
        theme_bw() +
        theme(panel.grid.major.y = element_blank()) +   # No horizontal grid lines
        facet_grid(power ~ ., scales="free_y", space="free_y") +
        ggtitle(paste0("Brand: ", input$brand, ", Model: " , input$model))
})    
```

EDIT 1: 我变了facet_grid to facet_wrap但错误仍然存​​在。

EDIT 2: 根据建议,我切换到facet_wrap用这个公式:p <- p + facet_wrap(power ~ .)。还是同样的错误。我也尝试过这个其他公式p <- p + facet_wrap(power ~ ranking)。错误仍然存​​在。

EDIT 3:关于facet_wrap我也尝试过使用这些公式:

  • facet_wrap(~power )
  • facet_wrap(vars(power ))
  • facet_wrap(vars(power , ranking)).

错误仍然相同(相同)。不用找了 (Error in : Faceting variables must have at least one value).

EDIT 4: 如果我尝试facet_wrap(power),错误甚至更严重,因为这一口使 Shiny 崩溃:

Error: Column `function (lambda = 1) \n{\n    if (!is.numeric(lambda) || is.na(lambda)) \n        stop("invalid argument 'lambda'")\n    if (lambda <= 0) \n        return(make.link("log"))\n    if (lambda == 1) \n        return(make.link("identity"))\n    linkfun <- function(mu) mu^lambda\n    linkinv <- function(eta) pmax(eta^(1/lambda), .Machine$double.eps)\n    mu.eta <- function(eta) pmax((1/lambda) * eta^(1/lambda - \n        1), .Machine$double.eps)\n    valideta <- function(eta) all(is.finite(eta)) && all(eta > \n        0)\n    link <- paste0("mu^", round(lambda, 3))\n    structure(list(linkfun = linkfun, linkinv = linkinv, mu.eta = mu.eta, \n        valideta = valideta, name = link), class = "link-glm")\n}` must be a 1d atomic vector or a list

当出现此错误时dataset()其中没有行。当我运行你的代码时(当前版本facet_grid(power ~ .,),实际上效果很好。当我选择一个新品牌时,有一个短暂的间隙显示此错误,而input$model列出更新。一旦完成,并且结合brand and model返回行,绘图显示得很好。

您可以通过使用来防止这种差距req推迟渲染绘图,直到满足某些要求。只需在您的顶部插入以下代码renderPlot

req(nrow(dataset()) > 0)

这将防止renderPlot从运行如果dataset()不包含至少一行。在这种情况下,绘图将只是空白(删除可怕的错误消息),直到数据可供使用。添加该行后,您的应用程序似乎运行良好(顺便说一句,看起来相当不错)。


您可以通过在外部测试代码来查看该错误消息的来源shiny语境。这是您的情节的最小示例:

ggplot(dataset, aes(x = ranking, y = measure)) +
        geom_segment(aes(yend = measure), xend=0, color = "grey50") +
        geom_point(size = 3, aes(colour = power)) +
        facet_grid(power ~ ., scales="free_y", space="free_y")

当我做dataset使用此调用:

dataset <- subset(mtcars_tidy, brand == 'Honda' & model == 'Honda Civic')

绘图正确呈现。当我使用subset不返回任何行:

dataset <- subset(mtcars_tidy, brand == 'Honda' & model == 'Civic')

我得到你同样的错误:

Error: Faceting variables must have at least one value

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shiny flexdashboard 中的facet_grid 给出错误“分面变量必须至少有一个值” 的相关文章

  • 如何生成向量的所有组合[重复]

    这个问题在这里已经有答案了 假设我有 3 个绿球 2 个橙球和 8 个黄球 我想订购它们 鉴于所有相同颜色的球都是相同的 如何生成所有可能的序列 在 R 中 使用gregmisc 我可以 balls lt c orange orange g
  • 如何调整ggplot直方图的时间刻度轴

    我正在使用一个数据框 其中一列包含POSIXct日期时间值 我正在尝试使用绘制这些时间戳的直方图ggplot2但我有两个问题 我不知道如何设置 binwidthgeom histogram 我想将每个垃圾箱设置为一天或一周 我尝试提供 di
  • 将summary()写入as.data.frame以在ggplot / R中使用

    请查找 af 数据样本t below 我正在使用以下方法进行竞争风险分析etmCIF来自etm package 产生以下结果 这很好 但需要更好的图形 曾经有一个ggtrans etm函数将数据导入ggplot 然而 这个功能显然被删除了
  • 在 mac (iMac OSX ) 终端中远程运行脚本(r 脚本)到其他计算机

    我有一个小示例脚本 script p r 如下所示 打算在终端中运行 usr bin Rscript sink output capture txt mn lt mean 1 10 and so on much longer list of
  • 使用底格里斯河从纬度/经度获取人口普查区

    我有相对较多的坐标 我想获取其人口普查区 除了 FIPS 代码 我知道我可以使用以下命令查找各个纬度 经度对call geolocator latlon 已完成here https stackoverflow com questions 5
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • 如何更新条件公式?

    让我直接进入示例 考虑以下等式 frml lt formula y a b x z 使用这样的公式规范 例如和AER ivreg 我想更新这个公式 使其显示为 frml2 lt y a b c x z w 但是 我不确定如何更新条件标志之前
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • R 编程:如何计算数据框中两个单元格之间的差异并将它们保存在新列中

    尝试学习 R 并陷入自相关示例中 我想将 x 的差异与 y 的差异进行回归 我在数据框中有 x 和 y 并且希望将 x2 x1 的差值保存在新列 例如 dx 中 我不知道该怎么做 我拥有的 data1 x y 5 3 8 9 3 1 1 5
  • 将 sf voronoi 多边形裁剪到边界框时出错

    我正在尝试将 voronoi polygons 使用 sf package 创建 剪辑 到边界框 但它引发了我无法定义的错误 我对 R 的空间世界不太有经验 感谢所有帮助 样本数据 stations lt structure list ST
  • R 更改小数位且不四舍五入

    gt signif 1 89 digits 2 1 1 9 我想要1 8 这有点笨拙 但它会起作用并保持所有数字 x lt 1 829380 trunc dec lt function x n floor x 10 n 10 n Resul
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 如何在R中同时对三个字段进行网络分析

    如何在 R 中同时对三个字段进行网络分析 下面是示例数据以及desired output在最后一栏中 df lt data frame stringsAsFactors FALSE id 1 c ABC ABC BCD CDE DEF EF
  • 为什么 geom_boxplot 比基本箱线图识别更多异常值?

    这是一个可重复的示例 与基本箱线图相比 最后一个治疗组又发现了一个异常值 dta lt structure list Treatment c A A A A A A A A A A A A A A A A B B B B B B B B B
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想

随机推荐

  • Python 和 MySQLdb:表替换导致语法错误

    我需要时不时地动态更改表和变量 所以我写了一个像这样的python方法 selectQ SELECT FROM s WHERE s s self db execute selectQ self table self columnSpecNa
  • F# 中“>>”运算符的语义

    在微软的F 样本 他们使用 gt gt 运算符 如下所示 test gt Seq iter any to string gt gt printfn line s gt gt 运算符在这种情况下做什么 序列中的每个项目 在本例中为数组 是否被
  • .NET 异步流读/写

    我一直在尝试解决这个 并发编程 考试练习 C 知道Stream类包含int Read byte buffer int offset int size and void Write byte buffer int offset int siz
  • Html / Php 表单未添加到 SQL 数据库

    我已经为此工作了几个小时 包括重建我的整个代码 我无法弄清楚出了什么问题 HTML 表单应该填充患者 SQL 数据库 但它不起作用 我在网站的另一部分使用了一个类似的表格 该表格可以完美地工作 但这个表格似乎不起作用 并且无法弄清楚为什么
  • MySQL REPEATABLE-READ Workbench 事务级别未设置

    我们在 my ini 文件中设置了以下内容 mysql 事务隔离 已提交读 我们假设此设置将是所有用户会话的默认设置 使用 PHPMyAdmin 登录时 tx isolation 设置正确并且按预期工作 然而 当使用 MySQL Workb
  • 拖放在 C# 中不起作用

    我在 C 中创建了一个拖放控件 以允许人们将文件拖放到我的表单上 这是我遇到的问题 调试时工作正常 但是 当以管理员模式运行我的程序时 它不起作用 这有什么原因吗 这是我的代码 private void panel1 DragEnter o
  • .NET 24 小时格式时间的正则表达式

    我可以在 NET 中有一个正则表达式吗 它只允许文本框中使用 24 小时时间格式 Thanks 此致 多发性硬化症 正则表达式 时间 hh mm 验证 24 小时格式 0 1 d 2 0 3 0 5 d 如果你也需要几秒钟 0 1 d 2
  • 使用 HTML 的 PHP 表格

    我的目标是使用一个 txt 文件 其中包含填写表单的特定响应所需的数据 该表格应该有用户名和密码 此外 还可以在表单上设置价格范围参数 用户名可以任意大小写 但密码区分大小写 我已经创建了我将使用的 html 表单 txt 文件中的数据包含
  • 使用函数参数进行回文条件检查[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 这是使用函数参数来检查字符串是否回文的 php 代码
  • Java 日期之间的天数(作业)

    当我运行该程序时 这是几天的休息时间 对我做错了什么有什么建议吗 我知道有一种更简单的方法可以做到这一点 但为此我试图展示查找之间的天数的所有实际步骤 家庭作业 因此不能使用日期时间库 public class DaysBetween pu
  • Spring REST 模拟上下文路径

    我尝试使用以下代码片段设置 Spring Rest 模拟的上下文路径 private MockMvc mockMvc Before public void setUp this mockMvc MockMvcBuilders webAppC
  • 重复条目并重命名 pandas 数据透视表中的列行而不进行聚合

    我正在尝试将这个示例数据帧从长格式重塑为宽格式 而不聚合任何数据 import numpy as np import pandas as pd df pd DataFrame SubjectID A A A B B C A Date 201
  • ssh远程主机标识已更改[关闭]

    Closed 这个问题是与编程或软件开发无关 目前不接受答案 我已经重新安装了服务器 并且收到以下消息 user hostname ssh root pong WARNING REMOTE HOST IDENTIFICATION HAS C
  • Libsodium“调用未定义的函数sodium_randombytes_buf”[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 尝试遵循示例here 但它给了我 Fatal error Uncaught Error Call to undefined function sodium randombytes buf
  • 如何更改 adobe reader 缩放级别?

    我有一个 Jasper Report 它在 Java Spring 中创建 PDF 我已经尝试改变缩放级别几个小时但没有成功 每当我使用 Adob e reader 打开 pdf 时 其分辨率为 149 同事甚至更糟 曾经有一个类似的que
  • 为什么可以将匿名类的实例分配给接口变量?

    我是 Java 新手 我无法理解之间的关系anonymous class instance and interface 请参阅中的示例这个网站 anonymous instance as a variable Runnable r new
  • 读取和写入文件的最简单方法

    有很多不同的方式来读取和写入文件 文本文件 不是二进制 在 C 中 我只需要简单且使用最少代码的东西 因为我将在项目中大量使用文件 我只需要一些东西string因为我需要的只是阅读和写作strings Use 文件 ReadAllText
  • 我是否需要在
    标记等末尾添加“/”? [复制]

    这个问题在这里已经有答案了 你需要有一个 在一个结束时img标签 我看见一个例子在 W3schools com 上没有 img src smiley gif alt Smiley face height 42 width 42 我知道没有必
  • 提取方法中的空验证

    我使用 c 8 和可空分析器 csproj
  • Shiny flexdashboard 中的facet_grid 给出错误“分面变量必须至少有一个值”

    我在获取 ggplot2 时遇到一些问题facet grid评估系统的绘图 该图渲染良好 但我在浏览器和控制台中收到以下错误 错误 分面变量必须至少有一个值 每次我根据输入切换品牌条目时都会发生这种情况input brand 应用程序不会崩