我想要创建一个R闪亮的应用程序,我想有两个selectInput,即数据集名称和列名称。现在,我能够在第一个输入中获取数据集名称,但我无法创建依赖列selectIput(其列表将取决于所选的数据集)。请指导。
require(shiny)
require(MASS)
a <- data(package = "MASS")[3]
b <- a$results[,3]
ui <- fluidPage(
sidebarPanel(width = 2,
selectInput(inputId = "dsname",label = "Select Dataset:",choices = c(b)),
colnames <- names("dsname"),
selectInput(inputId = "columns", label = "Choose columns",
choices = c(colnames))
)
)
server <- function(input,output) {}
shinyApp(ui <- ui, server <- server)
答案 0 :(得分:0)
为了在Shiny中拥有“响应”元素,您需要包装表达式以计算reactive({...})
中的响应元素。
您可以在renderUI
server()
和uiOutput
ui()
中使用library(shinythemes)
library(shiny)
library(ggplot2)
ui <- fluidPage(theme = shinytheme("superhero"),
titlePanel("Welcome to Responisve Shiny"),
sidebarLayout(
sidebarPanel(
selectInput("data", "Dataset:",
choices = c("mtcars", "iris", "diamonds")
),
uiOutput("x_axis"),
uiOutput("y_axis"),
uiOutput("color")
),
mainPanel(
plotOutput("distPlot")
)
)
)
server <- function(input, output) {
output$x_axis <- renderUI({
col_opts <- get(input$data)
selectInput("x_axis2", "X-Axis:",
choices = names(col_opts))
})
output$y_axis <- renderUI({
cols2 <- reactive({
col_opts2 <- get(input$data)
names(col_opts2)[!grepl(input$x_axis2, names(col_opts2))]
})
selectInput("y_axis2", "Y-Axis:",
choices = cols2(),
selected = "hp")
})
output$color <- renderUI({
col_opts <- get(input$data)
selectInput("color", "Color:",
choices = names(col_opts),
selected = "cyl")
})
output$distPlot <- renderPlot({
if(input$data == "mtcars"){
p <- ggplot(mtcars, aes_string(input$x_axis2, input$y_axis2, color = input$color)) +
geom_point()
}
if(input$data == "iris"){
p <- ggplot(iris, aes_string(input$x_axis2, input$y_axis2, color = input$color)) +
geom_point()
}
if(input$data == "diamonds"){
p <- ggplot(diamonds, aes_string(input$x_axis2, input$y_axis2, color = input$color)) +
geom_point()
}
print(p)
})
}
shinyApp(ui = ui, server = server)
。这是我为使用R的一些数据集(虹膜,mtcars和钻石)而构建的一个例子:
import java.io.*;
public class p19
{
public static void main()throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
char arr[] = new char[10];
int i ;char plol;
System.out.println("Enter characters");
for(i=0;i<10;i++)
{
arr[i] = (char)br.read();
}
for(i=0;i<10;i++)
{
int x = 0;
for(int j=1;j<10-i;j++,x++)
{
if(arr[j]<(arr[x]))
{
plol = arr[j];
arr[j] = arr[i];
arr[i] = plol;
}
}
}
for(i=0;i<10;i++)
System.out.println(arr[i]);
}
}