我正在尝试创建一个Shiny页面,其中包含基于查询结果的动态输入。我希望输入选择取决于之前的selectInput()
选择。查询结果作为一系列data.tables返回,保存在reactiveValue()
中,结构如下:
V1 V2 V3 V4 V5 key_index
along with this development comes 45473
第一个selectInput()
选项选项只是第一个data.table的粘贴列V1:V5的列表。我试图使其成为下一个和后续的selectInputs()
由其关联表的V1:V5组成,其中该表的V1与前一个的V5相同。使用样本数据,第二个selectInput()
的选择将仅由数据的ngram组成。表2以'开头。这就是我试图创建第一个输入的方式,它会返回一个我可以用来设置第二个输入的值,但我甚至无法超越系列中的第一个输入。有没有更好的方法呢?
trythis <- reactive({
tmpthis <- unlist(lapply(1:nrow(ngra1), function(n) ngra1[n,5]))
return(tmpthis)
})
trythat <- reactive({
tmpthat <- unlist(lapply(1:nrow(ngra1), function(m) paste0(ngra1[m,1:5],collapse=" ")))
return(tmpthat)
})
output$oneapage <- renderUI({
sidebarLayout(
sidebarPanel(
fluidRow(
print(trythat()),
print(trythis()),
thing <- for(j in 1:length(trythat())){paste("'",trythat()[[j]],"' = '",trythis()[[j]],"'")},
selectInput("tester","test",choices = c(thing[1:length(thing)]))
)
),
答案 0 :(得分:0)
我编写了以下数据框,其结构与您的相似。它是一个3列数据框架:
df <- data.frame( V1 = letters[1:10],
V2 = letters[2:11],
V3 = letters[3:12] )
V1 V2 V3
1 a b c
2 b c d
3 c d e
...
我列出了choice1
选项:
C1.options <- with(df, paste(V1,V2,V3))
[1] "a b c" "b c d" "c d e" ...
您希望用户在C1.options
之间选择df
,然后子集df$V1 == choice1$V3
之间的条目(让我们称之为C2.options
}),然后让用户在C2.options
中选择一个条目。
这是执行此操作的代码块:
ui <- fluidPage(
selectInput("choice1", "First Choice", C1.options, selected=NULL),
htmlOutput("plot1") # render dynamic selectInput in server
)
server <- function(input,output){
data <- reactive({ Str <- unlist(strsplit(input$choice1," "))
Str <- Str[length(Str)] # Grab last character in option 1
Filt <- df %>% filter(V1 == Str) # Filter by condition
C2.options <- with(Filt, paste(V1,V2,V3))
return(C2.options) })
output$plot1 <- renderUI({ selectInput("choice2", "Second Choice", data(), selected=NULL) })
}
shinyApp(ui=ui,server=server)
答案 1 :(得分:0)
这是我最终确定的代码。允许我最终将它全部拉到一起的位是使用Date.prototype.getWeek = function() {
var onejan = new Date(this.getFullYear(), 0, 1);
return Math.ceil((((this - onejan) / 86400000) + onejan.getDay() + 1) / 7);
}
document.write('<br>D1 - 01st June 2017: ' + new Date(2017, 6, 1).getWeek());
document.write('<br>D2 - 26th June 2017: ' + new Date(2017, 6, 26).getWeek());
var weeksBetween = new Date(2017, 6, 26).getWeek() - new Date(2017, 6, 01).getWeek();
document.write('<br><br>Weeks between D1 and D2: ' + weeksBetween);
来访问输入变量的内容
input[[]]