为什么在 Shiny 中会出现“下标越界”错误,但在 R 中却没有?

2024-03-09

我最近在shiny google group发布了类似的询问,但没有找到解决方案。我们正在开发一个闪亮的应用程序,正如主题所示,我们在运行该应用程序时收到“错误:下标越界”消息。然而,当我们隔离有问题的代码并在 RStudio 中单独运行它时,没有错误。

这让我想知道 Shiny 本身是否存在错误,或者我们是否遗漏了某些东西。

请参阅下面的说明以及产生错误的小示例。我们使用的是 Shiny 版本 0.8.0 和 RStudio 0.98.501。

感谢您的帮助!


要运行该应用程序,请将 ui.R 和 server.R (见下文)放入文件夹中并运行

library(shiny)
runApp("<folder path>")

它应该生成一个用户界面,左侧有一个按钮,但在右侧您将看到“错误:下标超出范围”。

但是,如果只运行以下三行代码(大约在 server.R 中的第 57-59 行)

show=data.frame(ps=c(4,-1,0,1),ns=c(0,1,0,0),ts=c(45842,15653,28535,21656))
best.fit1=regsubsets(ts~ps+ns,data=show,nvmax=1)
pred1=predict.regsubsets(best.fit1,show,id=1)  # line that offends Shiny

在 RStudio 中(需要包含函数“predict.regsubsets” - 在 server.R 的开头给出),那么就没有错误。

#####################
## server.R
#####################

library(rms)
library(leaps)
library(shiny)
library(datasets)
library(stringr)
library(ttutils)
library(plyr)
library(utils)
library(ggplot2)

# object is a regsubsets object
# newdata is of the form of a row or collection of rows in the dataset
# id specifies the number of terms in the model, since regsubsets objects 
#  includes models of size 1 up to a specified number
predict.regsubsets=function(object,newdata,id,...){
  form=as.formula(object$call[[2]])

  mat=model.matrix(form,newdata)

  mat.dims=dim(mat)
  coefi=coef(object,id=id)
  xvars=names(coefi)
  # because mat only has those categorical variable categories associated with newdata, 
  # it is possible that xvars (whose variables are defined by the "best" model of size i)
  # has a category that is not in mat
  diffs=setdiff(xvars,colnames(mat))
  ndiffs=length(diffs)
  if(ndiffs>0){
    # add columns of 0's for each variable in xvars that is not in mat
    mat=cbind(mat,matrix(0,mat.dims[1],ndiffs))
    # for the last "ndiffs" columns, make appropriate names
    colnames(mat)[(mat.dims[2]+1):(mat.dims[2]+ndiffs)]=diffs
    mat[,xvars]%*%coefi
  }
  else{
    mat[,xvars]%*%coefi
  }
}

# Define server logic required to summarize and view the selected dataset
shinyServer(function(input, output) {

mainTable1 <- reactive({

  }) 

output$table21 <- renderTable({
    mainTable1()
  })


formulamodel1 <- reactive({
    #ticketsale<-dataset1Input()

  show=data.frame(ps=c(4,-1,0,1),ns=c(0,1,0,0),ts=c(45842,15653,28535,21656))
  best.fit1=regsubsets(ts~ps+ns,data=show,nvmax=1)
  pred1=predict.regsubsets(best.fit1,show,id=1)

  })

output$model1fit <- renderPrint({
    formulamodel1()

  }) 

 })

######################
## end server.R
######################

######################
## ui.R
######################

library(rms)
library(leaps)
library(shiny)
library(datasets)
library(stringr)
library(ttutils)
library(plyr)
library(utils)
library(ggplot2)

shinyUI(pageWithSidebar(

headerPanel("Forecasting ticket sales for xxx"),

sidebarPanel(
        p(strong("Model Fitting")),

    selectInput("order1", "Sort results by:",c("a","b","c")),
    submitButton("Run Model")

    ),

   mainPanel(

    h3(strong("Model fit without using ticket sales") ),
    tableOutput("table21"),
    verbatimTextOutput(outputId = "model1fit")

   )
))

这三行似乎仅在全局环境中执行时才有效。如果您获取该片段并在local({...})阻止你会看到同样的错误。

错误来自第一行predict.regsubsets,你看的地方object$call[[2]]. It's object$call这取决于它是否在全局环境中执行,这是非常不同的;它是在leaps:::regsubsets.formula通过致电sys.call(sys.parent())。也许这需要sys.call(sys.parent(0))(只是猜测)?

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

为什么在 Shiny 中会出现“下标越界”错误,但在 R 中却没有? 的相关文章

  • 将函数应用于每个列组合

    我有一个数据框n列并希望对每个列应用一个函数组合列 这与如何cor 函数将数据帧作为输入并生成相关矩阵作为输出 例如 X lt data frame A rnorm 100 B rnorm 100 C rnorm 100 cor X 这将生
  • 使 matplotlib 图形默认看起来像 R?

    Is there a way to make matplotlib behave identically to R or almost like R in terms of plotting defaults For example R t
  • 当添加列较少时追加到现有 SQLite 表,而不将数据库读入 R

    是否有一些简单的方法 无论是在 SQL 端还是在 R 端 将 data frame 附加到具有更多列的现有表 缺失的列应该用 NA 填充 如果它能够优雅地处理比表 1 列数更多的表 2 那么会加分吗 library RSQLite Crea
  • 用闪亮的 R 设计 DT 中的展开行按钮

    我正在尝试设计 DT 中可用的展开行按钮的样式 样式可用here https datatables net examples api row details html 我用于创建数据表的代码是 library DT datatable cb
  • 如何在knitr中安装软件包?

    到目前为止 我一直在使用这段代码来加载 R 包并编写 R 文件 但我正在尝试使用knitr rm list ls all TRUE kpacks lt c ggplot2 install github devtools mapdata ne
  • plot xts if (on == "years") { 中的错误:缺少 TRUE/FALSE 需要的值

    我正在尝试绘制 xts 对象 但出现有关年份的错误 xts 对象只有一个数值和一个 POSIXct 索引 下面的代码显示了 xts 和尝试绘图时的错误 关于需要对 xts 对象做什么才能正确绘制的任何想法 xTest lt as xts 3
  • svyby比例的置信区间

    是否存在创建置信区间的现有函数 从一个svyby比例对象 在我的例子中 是一个二进制项目的交叉表survey包裹 我经常比较各组之间的比例 如果有一个可以提取置信区间的函数 使用调查函数svyciprop而不是confint 下面的示例显示
  • 计算数据帧 R 中字符串的频率

    我想计算数据框中某些字符串的频率 strings lt c pi pie piece pin pinned post df lt as data frame strings 然后我想计算字符串的频率 counts lt c pi in pi
  • 删除绘图轴值

    我只是想知道是否有一种方法可以消除 r 图中的轴值 分别是 x 轴或 y 轴 我知道axes false将摆脱整个轴 但我只想摆脱编号 删除 x 轴或 y 轴上的编号 plot 1 10 xaxt n plot 1 10 yaxt n 如果
  • R Leaflet:添加多边形时传递 popupOptions。

    Within addPolygons 有一个popup参数就像addPopups 功能 区别 我认为 是当弹出窗口创建时addPolygons 可以单击多边形内的任意位置来触发弹出窗口 但是如果addPopups 被使用 单个lng and
  • linux下无法安装Cairo包

    我在本地下载该软件包并尝试安装它 但出现此错误 R CMD INSTALL l usr local lib64 R library Cairo 1 5 1 tar gz 我得到他的错误 checking for PNG support in
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是
  • 如何正确调整 R 中 ggplot 的各个方面的大小,包括图例?

    我在 ggplot2 中制作散点图 然后使用 ggsave 导出特定宽度和高度的 PDF 但是 图形图例永远不会使用 ggsave 正确调整大小 其边框不会留在绘图内 是否有另一种方法可以同时调整 ggplot 所有部分的大小以便于导出 我
  • 在R闪亮中,如何在UI端使用在SERVER端计算的值?

    在我的 R闪亮应用程序中 我想调整我的高度d3heatmap 见包装d3热图 https cran r project org web packages d3heatmap index html 作为我的数据框行数的函数 有一个论点heig
  • 在 R 中捕获段错误

    我得到了caught segfault每次我尝试从以下位置运行任何绘图函数时都会出错ggplot2包 1 0 0 我已经尝试过这个qplot geom dotplot geom histogram等来自包的数据 例如diamonds or
  • 如何在R中的2行之间交换多个值

    我有一个大小为 10x100 的矩阵 如何交换前 30 列中第 1 行和第 2 行之间的值 我们可以反转前两行的行索引以及通过采取序列创建的列索引rounded 30 总列数用于交换行中的值 colS lt seq round ncol m
  • R(或替代方案?)中的高(或非常高)阶多项式回归

    我想对 R 中的一组数据进行 非常 高阶回归拟合 但是poly 函数的阶数极限为 25 对于此应用程序 我需要的订单范围为 100 到 120 model lt lm noisy y poly q 50 Error in poly q 50
  • 如何使用 R 或 PowerShell 从文本文件中提取数据?

    我有一个包含如下数据的文本文件 This is just text Username SOMETHI C Text Account DFAG Finish time 1 JAN 2011 00 31 58 91 Process ID 202
  • 不理解..密度的行为

    在下面的数据框中 我预计密度的 y 轴值为 0 6 和 0 4 但它们是 1 0 我觉得我使用的方式显然缺少一些非常基本的东西 密度 但是我的大脑冻结了 我将如何使用 密度 获得所需的行为 任何帮助将不胜感激 df lt data fram
  • 递归累积函数

    我需要在 R 中编写一个累积求和函数 但我一直碰壁 该函数具有以下结构 a x1 a x2 a 2 x1 a x3 a 2 x2 a 3 x1 a x4 a 2 x3 a 3 x2 a 4 x1 等等 cumsum 似乎不适用于此类功能 有

随机推荐