我正在构建一个可以读入csv的Shiny应用程序,然后显示三个闪亮的dataTables
,每个都显示在自己的tabPanel
中;我在弄清楚如何处理第三张表时遇到了麻烦。
输入csv包含看起来像
的值0, 1, 2, 3, 4, 5
0.01, 0.02, 0.11, 0.00, 0.1
.
.
.
我正在尝试显示一个显示值的表,以及一个附加列,表示该行的值小于滑块谓词。因此,如果我将滑块值设置为0.05
,则所需的输出将为
tally, 0, 1, 2, 3, 4, 5
3, 0.01, 0.02, 0.11, 0.00, 0.1
在 UI.r 我尝试过(不包括不相关的代码)
sidebarPanel(
sliderInput("p-value", "P-Value Adjustment:",
min = 0.01, max = 0.1, value = 0.05, step = 0.01),
),
mainPanel(
#excluding two other panels that work correctly
tabsetPanel(
tabPanel("Interactive-Data",
dataTableOutput("interactive.table"))
)
)
然后在 Server.r
中shinyServer(function(input, output) {
value.frame <- read.csv("path/to/file")
sliderValues <- reactive({
input.frame <- data.frame(
Name = c("p-value"),
Value = c(input$p-value))
data.frame(cbind(input.frame, value.frame, stringsAsFactor=FALSE))
})
#I'm lost here
output$interactive.table = renderDataTable({
data.frame$tally <- rowSums(data.frame < p-value)
data.frame
})
我迷失了如何使用sliderInput
的输入来动态重新计算interactive.table$tally
列的值。 renderDataTable
是否合适或是否有其他方法可以解决这个问题?
答案 0 :(得分:3)
这似乎符合你的要求:
library(shiny)
shinyUI = pageWithSidebar(
headerPanel("Title"),
sidebarPanel(
sliderInput("p.value", "P-Value Adjustment:",
min = 0.01, max = 0.1, value = 0.05, step = 0.01)),
mainPanel(
tabsetPanel(
tabPanel("Interactive-Data",
dataTableOutput("interactive.table"))))
)
shinyServer = function(input,output){
value.frame <- data.frame(matrix(round(runif(60,0,0.2),2),ncol=6))
output$interactive.table <- renderDataTable({
tally <- sapply(1:nrow(value.frame), function(i)
rowSums(value.frame[i,2:ncol(value.frame)] < input$p.value,na.rm=T))
df <- data.frame("p-value"=input$p.value,tally,value.frame)
colnames(df)[3:8] <- c(as.character(0:5))
df
})}
runApp(list(
ui = shinyUI,
server = shinyServer
))
您的代码有几个有问题的方面。以下是一些:
p-value
而不是input$p-value
p-value
作为变量名称。 R认为input$p-value
是input$p
减去value
。您可以使用input$"p-value"
解决此问题,但这会使代码几乎无法理解,因此我将p-value
更改为p.value
。data.frame
的调用中引用了renderDataTable(...)
,就像它是变量一样。X
添加到以数字开头的任何列名称,因此如果您坚持列名称的数字,则必须删除X's
rowSums(...)
无效。