处理循环,fluidRow和列闪亮

时间:2016-10-06 15:42:27

标签: r shiny

我正在尝试制作一个在不同行上显示多个绘图的Shiny应用程序,并允许用户使用位于图形旁边的radioButtons选择适当的趋势。问题是我无法将电台按钮直接放在图表旁边。

我想:

enter image description here

我得到: enter image description here

我的代码:

server.R:

library(shiny)

shinyServer(function(input, output) {

  lapply(1:3, function(iter) {
    output[[paste0("g",iter)]] <- renderPlot({

    set.seed(iter)
    xx <- rnorm(10)
    yy <- rnorm(10)
    plot(xx,yy)
    abline(reg=lm(yy~xx), col=2, lwd=ifelse(input[[paste0("radio",iter)]]==1,2,1))
    abline(reg=lm(yy~xx+0), col=3, lwd=ifelse(input[[paste0("radio",iter)]]==2,2,1))

  })
  })

})

ui.R:

library(shiny)

shinyUI(fluidPage(

  titlePanel("My loop test"),

  fluidRow(
    column(6,
    lapply(1:3, function(iter) { 
      plotOutput(paste0("g",iter))
    }  
    )), 
    column(3,
      lapply(1:3, function(iter){
      radioButtons(paste0("radio",iter),label = "buttons", choices = list("with intercept"=1,"without intersept"=2),selected = 1)      

    }
    ))

  )
))

我希望它很清楚。我是Shiny(但不是R)的新手,我仍处于学习曲线的陡峭部分!

谢谢

2 个答案:

答案 0 :(得分:3)

也许是这样的:

shinyUI(fluidPage(
  titlePanel("My loop test"),
  lapply(1:3, function(iter) {
    fluidRow(
      column(
        6, 
        plotOutput( paste0("g",iter) )
      ),
      column(
        3,
        radioButtons(
          paste0("radio", iter), 
          label = "buttons",
          choices = list("with intercept"=1,"without intersept"=2),
          selected = 1)
        )
      )
  })
))

答案 1 :(得分:2)

这是模块的一个很好的用例。我没有让按钮完美排列,但可以通过一些CSS修复:

fluidRow

请注意,splitLayout还不够,我们必须使用{{1}}