我有几个包含n列坐标的输入文件,我怎么能设计一个闪亮的选择输入面板,我的选择是输入文件中的列数? 例如,一旦我读取了一个包含5个坐标文件的zipfile,在输出中我想说显示与文件1或文件2中的坐标相关的地图或...这意味着我的选择输入面板应该显示5个选项。 如果我读了一个包含100个文件的zipfile,我想下载100个选项! 我怎么能这样做?我查了this example但我不知道如何改编它!
这是我的代码示例。不幸的是,它不可重复,但降低了复杂性,易于理解:
ui <- fluidPage(
fileInput("File","upload your file"),
selectInput("Select1", "Select input",c())
mainPanel(tags$head(tags$style(type="text/css", ".tab-content {overflow: visible;}")),
leafletOutput("mymap"))
)
server <- function(input, output, session) {
coor <- reactive( {infile=input$File
if (is.null(infile))
return(NULL)
temp_files <- unzip(infile$datapath)
T=length(temp_files)
A_new=c();for(i in 1:T){A_new[[i]]=c()}
for(i in 1:T){
.
.
.
A_new[[i]]= ...
}
result <- list(A_new=A_new,T=T);
return(result);
})
observe({
x <- input$File
if (is.null(x))
x <- character(0)
map=coor()
updateSelectInput(session, "Select1",
label = paste("Select input label", map$T),
choices = map$A_new,
selected = tail(map$A_new, 1)
)
})
}
output$mymap <- renderLeaflet({
infile=input$File
if (is.null(infile))
return(NULL)
a2=coor()
leaflet() %>%
addProviderTiles("OpenTopoMap", group = "MapQuestOpen.Aerial") %>%
addMarkers(data =a2$A_new[[1]],~long, ~lat, popup = ~as.character(mag), label = ~as.character(Name))%>%
addMeasure()
})
在反应函数中,我读取了我的文件,进行了计算并得到了A_new[[i]]
文件,如下所示:
A_new[[1]]
long lat mag
1 60.20424 34.61457 1100.0
2 60.20739 34.61155 1098.3
3 60.21058 34.60852 1099.7
4 60.21382 34.60544 1100.5
5 60.21700 34.60239 1100.0
6 60.22039 34.59930 1102.7
7 60.22388 34.59596 1103.0
8 60.22743 34.59245 1101.3
9 60.20323 34.60650 1080.0
10 60.20653 34.60346 1080.0
11 60.20966 34.60040 1080.8
12 60.21277 34.59748 1082.7
13 60.21590 34.59462 1084.1
14 60.21890 34.59161 1083.1
我想在选择输入中有这个A_new [[i]],然后告诉output$mymap
返回相关的地图。
目前,因为我无法在地图输出中设计选择输入选项,所以我只显示第一个A_new[[i]]
A_new[[1]]
答案 0 :(得分:0)
您是否尝试使用fileinput上传任何CSV? 我已尝试使用fileinput读取CSV并在dropdownlist(selectInput)中重新更改列名称的解决方案。
上传第一张包含4列的CSV
列表中显示4列
现在再次上传一个包含21列的csv
其中显示了21列..
代码: ui.r
library(shiny)
fluidPage(
fileInput("file","Upload your CSV",multiple = FALSE),
wellPanel(
tags$h3("Select the parameters below"),
checkboxInput(inputId = 'header', label = 'Header', value = FALSE),
checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE),
radioButtons(inputId = 'sep', label = 'Separator', choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ',')
),
uiOutput("list_item")
)
Server.r
library(shiny)
shinyServer(function(input, output, session){
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)
})
output$list_item<-renderUI({
f<-data()
selectInput("selected_list","Select from the list",choices = as.list(colnames(f)))
})
})
如果你想使用upadateselectinput,我也可以这样做..