ページにプロットを動的に追加する光沢のあるアプリを作成したいと思います。それは10のプロットであり、1つだけである可能性があります。動的UIの光沢のあるホームページで このチュートリアル を使用しています。
これは簡単な例です。関数showme
はグラフをプロットしています
shinyServer(function(input, output) {
# Create an environment for storing data
symbol_env <- new.env()
# Make a chart for a symbol, with the settings from the inputs
make_chart <- function(symbol) {
showme(symbol)
}
display <- c("1083484" , "1101732")
output$MyList <- renderUi({
for (i in i:nrow(display))
renderPlot({make_chart(display[i])})
})
})
shinyUI(pageWithSidebar(
headerPanel("My Plots !"),
sidebarPanel(
wellPanel(
p(strong("Scan1"))))
,mainPanel(
uiOutput("MyList")
)))
次のエラーが発生します
Listening on port 8100
Error in .subset2(x, "impl")$defineOutput(name, value, deparse(substitute(value))) :
Unexpected character output for display
これが方法でない場合-ガイダンスをいただければ幸いです。ありがとう。
> sessionInfo()
R version 2.15.3 (2013-03-01)
Platform: i386-w64-mingw32/i386 (32-bit)
おそらく、Winston Changによるこの例は役に立ちます。
Linkrotの場合の完全な例を次に示します。
server.R
max_plots <- 5
shinyServer(function(input, output) {
# Insert the right number of plot output objects into the web page
output$plots <- renderUI({
plot_output_list <- lapply(1:input$n, function(i) {
plotname <- paste("plot", i, sep="")
plotOutput(plotname, height = 280, width = 250)
})
# Convert the list to a tagList - this is necessary for the list of items
# to display properly.
do.call(tagList, plot_output_list)
})
# Call renderPlot for each one. Plots are only actually generated when they
# are visible on the web page.
for (i in 1:max_plots) {
# Need local so that each item gets its own number. Without it, the value
# of i in the renderPlot() will be the same across all instances, because
# of when the expression is evaluated.
local({
my_i <- i
plotname <- paste("plot", my_i, sep="")
output[[plotname]] <- renderPlot({
plot(1:my_i, 1:my_i, xlim = c(1, max_plots), ylim = c(1, max_plots), main = paste("1:", my_i, ". n is ", input$n, sep = ""))
})
})
}
})
ui.R
shinyUI(pageWithSidebar(
headerPanel("Dynamic number of plots"),
sidebarPanel(
sliderInput("n", "Number of plots", value=1, min=1, max=5)
),
mainPanel(
uiOutput("plots") # This is the dynamic UI for the plots
)
))
上記のコメントの質問に答えるために、オブジェクトのリスト(プロット、テーブル、テキストなど)を動的に返す方法については、レンダーUIのdivタグに含まれる適切な出力のリストを生成できます。 forループの適切なレンダリング関数と一致します。例えば:
max_plots <- 5
shinyServer(function(input, output) {
# Insert the right number of plot output objects into the web page
output$plots <- renderUI({
plot_output_list <- lapply(1:input$n, function(i) {
plotname <- paste("plot", i, sep="")
plottitle <- paste("plottitle", i, sep="")
tablename <- paste("tablename", i, sep="")
tags$div(class = "group-output",
textOutput(plottitle, container = h3),
plotOutput(plotname, height = 280, width = 250),
tableOutput(tablename)
)
})
# Convert the list to a tagList - this is necessary for the list of items
# to display properly.
do.call(tagList, plot_output_list)
})
# Call renderPlot for each one. Plots are only actually generated when they
# are visible on the web page.
for (i in 1:max_plots) {
# Need local so that each item gets its own number. Without it, the value
# of i in the renderPlot() will be the same across all instances, because
# of when the expression is evaluated.
local({
my_i <- i
plotname <- paste("plot", my_i, sep="")
plottitle <- paste("plottitle", my_i, sep="")
tablename <- paste("tablename", my_i, sep="")
output[[plotname]] <- renderPlot({
plot(1:my_i, 1:my_i, xlim = c(1, max_plots), ylim = c(1, max_plots), main = paste("1:", my_i, ". n is ", input$n, sep = ""))
})
output[[plottitle]] <- renderText({paste("1:", my_i, ". n is ", input$n, sep = "")
})
output[[tablename]] <- renderTable({table(x = 1:my_i, y = 1:my_i)
})
})
}
})
お役に立てば幸いです。
光沢を使用して、必要に応じてN個のプロットを動的に追加します:
runApp(
list(
ui = fluidPage(
headerPanel('Tittle'),
sidebarPanel(
fileInput('file1', 'Choose File:'),
textInput("target", label="Target", value="Choose target"),
actionButton("addButton", "Go!"),
p('The button start the code server'),
p("This is UI")
),
mainPanel(
uiOutput("plots")
)),
#SERVER
server = function(input, output) {
dataset <- eventReactive(input$addButton, {
#Obtain the file and textinput
inFile <- input$file1
df <- read.csv(inFile$datapath)
df$target <- input$target
return(df)
})
output$plots <- renderUI({
df <- dataset()
n <- df$target[1]
plot_output_list <- lapply(1:n, function(i) {
plotname <- paste("plot", i, sep="")
plotOutput(plotname, height = 580, width = 550)
})
do.call(tagList, plot_output_list)
})
observe({
for (i in 1:length()) {
local({
plotname <- paste("plot", i, sep="")
output[[plotname]] <- renderPlot({
#function_plot is the function generate plot
function_plot()
})
})#endlocal
}
})
}
)
)
https://github.com/ericbellet/recomendacion-modelos/blob/master/shiny/generate_rocSHINY.R