r shiny server根据输入创建矢量,用于子集化数据帧

时间:2017-12-28 03:55:53

标签: r shiny user-input reactive-programming shiny-server

server <- (function(input, output, session){
  s1m <- reactive({c(input$s1m1,input$s1m2,input$s1m3)})

  library(stringdist)
  result <- responses[which.max(apply(responses,1,function(vec,dat){sum(vec==dat)},s1m)),]

  output$result <- renderUI(result)
})

我需要专门创建一个角色向量&#34; s1m&#34;使用3个不同的用户输入s1m1,s1m2,s1m3,以便它可以用于我的数据帧&#34;响应&#34;。

我得到的错误是 vec == dat中的错误:比较(1)仅适用于原子和列表类型

我认为这是因为s1m被reactive()包裹而且它不被认为是一个向量。所以我的问题是如何将其强制转换为矢量或者是否有其他方法来创建具有用户输入的矢量?

非常感谢你们!

1 个答案:

答案 0 :(得分:0)

我认为你应该创建如下的反应值。我没有对此进行测试,但您也可以将它们包装到数据框或列表中。

server <- (function(input, output, session) {
  s1m <- reactiveValues({
    c(input$s1m1, input$s1m2,input$s1m3)
  })

  library(stringdist)
  result <-
    responses[which.max(apply(responses, 1, function(vec, dat) {
      sum(vec == dat)
    }, s1m())), ]

  output$result <- renderUI(result)
})