我刚刚开始使用闪亮,并得到以下基本问题。
1)上传的纵向数据包括具有治疗名称(例如A,B,C,D)的列,另一个包括相应的数字代码:例如1,2,4,6。根据上传的数据,编码可能会有所不同。每组治疗均由患者组成。
我想使用数字代码来选择要比较的治疗,排序为numericInput()。我需要根据提供的实际数据集中的编码更新列表。到目前为止,我用numericInput()做了它,假设编码在1到10之间(参见下面的代码)。
2)如果我想根据治疗名称(此处为A,B,C,D)进行选择,这些名称可能会在感兴趣的数据集中有所不同?
非常感谢。
shinyServer(function(input, output){
## Data reactives:
uploaded_Data <- reactive({
inFile <- input $ data
if(is.null(inFile)){return(NULL)}
read.csv(file = inFile $ datapath,
header=TRUE)
output $ raw_data <- renderTable({
uploaded_Data()
})## for table
})
shinyUI(pageWithSidebar(
headerPanel(''),
sidebarPanel(
fileInput('data', 'File to upload (.csv only):',
accept=c('.csv')),
tags $ hr(),
h4('Select treatments:'),
numericInput('T1','Treatment1 code:',1, min=1, max=10, step=1),
numericInput('T2','Treatment2 code:',2, min=2, max=10, step=1)
),
## Option for tabsets:
mainPanel(
tabsetPanel(
tabPanel('Uploaded Data',
tableOutput('raw_data'))
)
)
))## overall
答案 0 :(得分:2)
我认为你问的是如何基于上传的数据呈现动态UI输入?
如果是这种情况,请尝试将以下策略集成到您的应用中:
server.R:
#incomplete example
output$groupsToCompare <- renderUI({
data <- uploaded_data()
if(is.null(data)){return(NULL)} #This prevents an error if no data is loaded
#In this example I will use selectInput, but you can also use checkboxInput or whatever really
selectInput(inputId = 'selectedGroups', label = 'Select which groups to compare', choices = unique(data$treatments), multiple = TRUE)
})
#an example of how to use this input object
output$dataToShow <- renderTable ({
data <- uploaded_data()
if(is.null(data)){return(NULL)}
#subset the data of interest; There are MANY ways to do this, I'm being verbose
subsetData <- subset(data, input$selectedGroups)
#alternatively, you could do data[input$selectedGroups]
return(subsetData)
})
ui.R:
#incomplete example
uiOutput('selectedGroups')
这将动态生成可以选择作为输入的唯一因子列表。在您的情况下,它将生成“A”,“B”,“C”,“D”列表或数字因子列表。这些输入可用于对数据进行子集化,或为您梦寐以求的任何选择某些变量。我认为这可以回答你的两个问题,但如果不是,请告诉我,以便澄清。我之前没有使用selectInput
测试multiple = TRUE
,但我认为它会正常工作。一开始会觉得不寻常,因为你基本上在server.R中设置了一个UI元素,你习惯于在ui.R中构建UI,但是一旦你做了几次就会变成肉汁。
答案 1 :(得分:1)
我认为使用updateCheckboxGroupInput()
- 函数可能会有所帮助
在 server.R :
中首先将shinyServer(function(input, output) ...
更改为shinyServer(function(input, output, session) ...
而不是:
observe({
x <- uploaded_Data()
updateCheckboxGroupInput(session,
inputID = "selectedTreatments",
label = "Select which groups to compare",
choices = unique(x$treatments), # treatment columns
selected = unique(x$treatments),
inline = FALSE)
})
在sidebarPanel()
添加中的 ui.R
checkboxGroupInput(inputId = 'selectedTreatments',
label = 'no treatments to select yet',
choices = 1)
这会创建一个虚拟复选框,在上传文件后将替换为处理。 observe函数使“更新”进程不可见。数字输入可以类似地完成。
反馈会很好,因为我自己开始学习它并遇到同样的问题。这个解决方案对我有用。我不知道是否有办法让复选框仅在文件上传时出现。