Rhandsontable在闪亮的

Rhandsontable在闪亮的,r,shiny,data-visualization,rhandsontable,R,Shiny,Data Visualization,Rhandsontable,编辑:我在server.R中包含了observeEvent(),如本视频中所述: . 它部分起作用。当我更新A和B时,图形会被更新,但是C、D和E列给出了错误的值,并且行数不断增加。感谢您的帮助 我有两列A和B。用户可以选择将值拖放到A和B中,因此我使用的是rhandsontable(来源:) 下面是ui.R和server.R的代码。 该应用程序基本上有一个可编辑的表格和一个ggplotly输出。根据我在A列和B列中输入的内容,C列、D列和E列应该根据我在server.R中包含的一些公式自动更

编辑:我在server.R中包含了observeEvent(),如本视频中所述: . 它部分起作用。当我更新A和B时,图形会被更新,但是C、D和E列给出了错误的值,并且行数不断增加。感谢您的帮助

我有两列A和B。用户可以选择将值拖放到A和B中,因此我使用的是rhandsontable(来源:)

下面是ui.R和server.R的代码。 该应用程序基本上有一个可编辑的表格和一个ggplotly输出。根据我在A列和B列中输入的内容,C列、D列和E列应该根据我在server.R中包含的一些公式自动更新。当我运行此代码时,图形和列不会更新。我该怎么办

用户界面

服务器.R

shinyServer(function(input, output, session) {

  df<- data.frame(A=c(9,15,25,35,40,45,50,55,60,65,75,85,95,105,120,125),
                  B=c(0.5,1.5,3,8,16,23,30,36,43,58,64,78,92,98,99,100))

  for(i in 2:(nrow(df))) 
  {
    df[i,3]<-df[i-1,1]+(df[i,1]-df[i-1,1])/2
    df[i,4]<-(df[i,2]-df[i-1,2])
    df[i,5]<- scientific(df[i,4]/df[i,3]/100,digits=3)
  }

  datavalues<-reactiveValues(data=df)

 output$table <- renderRHandsontable({

    mytab <- rhandsontable(datavalues$data, colHeaders=TRUE, rowHeaders=TRUE)
    return(mytab)
  })


  observeEvent(

    input$table$changes$changes,
    {
      xi= input$table$changes$changes[[1]][[1]]
      datavalues$data<-hot_to_r(input$table)

      for(i in 2:(nrow(df)))
      {

        datavalues$data[xi+i,3]<-datavalues$data[i-1,1]+(datavalues$data[i,1]-datavalues$data[i-1,1])/2
        datavalues$data[xi+i,4]<-(datavalues$data[i,2]-datavalues$data[i-1,2])
        datavalues$data[xi+i,5]<- scientific(datavalues$data[i,4]/datavalues$data[i,3]/100,digits=3)
      }

    }
  )




  output$plot<-renderPlotly({

    plt<-
      ggplot(datavalues$data,aes(A,B))+
      geom_point()+
      geom_line()+
      xlab("A")+
      ylab("B")

    p<-config(ggplotly(plt),mathjax = 'cdn')
    p

  })
shinyServer(功能(输入、输出、会话){

dfI怀疑大部分问题都存在于
observeEvent
中的
for
循环中。您能否进一步解释一下预期行为是什么?当您更改或编辑列a或B的特定行中的值时,是否希望C、D、E列仅在同一行中更新?您能否详细描述一下为什么要使用
forloop?由于循环增加到
nrow(df)
,并且您在行索引中添加了
xi
,因此为第3-5列添加额外的行是有意义的……您好,非常感谢您捕捉到它,正如您提到的,问题出在observeEvent内部。xi=input$table$changes$changes[[1][[1]]不需要。有几个其他问题。1.如何使列C、D和E为只读?2.我想将列名更改为latex形式。我正在尝试使用latex2exp包,不确定在何处包含它3.当我将鼠标悬停在数据点上时,我想获得类似(a、b)的内容,而不是datavalues$data[,3]:datavalues$data[,4]:b您可能想编辑您的问题或提交一个新问题以涵盖所有内容,但我将在此处提供更多内容。列C、D和E基本上是只读的,因为如果以任何方式更改,您当前会覆盖这些值。但要将其灰显并设为“只读”,您可以添加
%%>%hot\u col(col=3:5,readOnly=TRUE)
在您的
rhandsontable
语句之后。我对
latex2exp
软件包不太熟悉,但会四处寻找帮助,或发布新问题。最后,悬停的标签可能来自列名。在我运行的版本中,它在两行上显示
a:55 B:36
。要重现您的内容,我需要t可能有助于更新您发布的问题。希望这会有所帮助。谢谢!我发布了另一个问题并链接了此问题-我怀疑大部分问题都存在于
observeEvent
中的
for
循环中。您能解释一下预期行为是什么吗?当您更改编辑特定行中的值时对于A列或B列,是否希望C列、D列、E列仅在同一行中更新?能否详细描述一下为什么有
for
循环?因为循环增加到
nrow(df)
然后在行索引中添加
xi
在第3-5列中添加额外的行是有意义的…您好,非常感谢您捕获它,正如您提到的,问题出在observeEvent内部。xi=input$table$changes$changes[[1][[1]]不需要。有几个其他问题。1.如何使列C、D和E为只读?2.我想将列名更改为latex形式。我正在尝试使用latex2exp包,不确定在何处包含它3.当我将鼠标悬停在数据点上时,我想获得类似(a、b)的内容,而不是datavalues$data[,3]:datavalues$data[,4]:b您可能想编辑您的问题或提交一个新问题以涵盖所有内容,但我将在此处提供更多内容。列C、D和E基本上是只读的,因为如果以任何方式更改,您当前会覆盖这些值。但要将其灰显并设为“只读”,您可以添加
%%>%hot\u col(col=3:5,readOnly=TRUE)
在您的
rhandsontable
语句之后。我对
latex2exp
软件包不太熟悉,但会四处寻找帮助,或发布新问题。最后,悬停的标签可能来自列名。在我运行的版本中,它在两行上显示
a:55 B:36
。要重现您的内容,我需要t可能有助于更新您发布的问题。希望这对您有所帮助。谢谢!我发布了另一个问题并链接了此问题-
shinyServer(function(input, output, session) {

  df<- data.frame(A=c(9,15,25,35,40,45,50,55,60,65,75,85,95,105,120,125),
                  B=c(0.5,1.5,3,8,16,23,30,36,43,58,64,78,92,98,99,100))

  for(i in 2:(nrow(df))) 
  {
    df[i,3]<-df[i-1,1]+(df[i,1]-df[i-1,1])/2
    df[i,4]<-(df[i,2]-df[i-1,2])
    df[i,5]<- scientific(df[i,4]/df[i,3]/100,digits=3)
  }

  datavalues<-reactiveValues(data=df)

 output$table <- renderRHandsontable({

    mytab <- rhandsontable(datavalues$data, colHeaders=TRUE, rowHeaders=TRUE)
    return(mytab)
  })


  observeEvent(

    input$table$changes$changes,
    {
      xi= input$table$changes$changes[[1]][[1]]
      datavalues$data<-hot_to_r(input$table)

      for(i in 2:(nrow(df)))
      {

        datavalues$data[xi+i,3]<-datavalues$data[i-1,1]+(datavalues$data[i,1]-datavalues$data[i-1,1])/2
        datavalues$data[xi+i,4]<-(datavalues$data[i,2]-datavalues$data[i-1,2])
        datavalues$data[xi+i,5]<- scientific(datavalues$data[i,4]/datavalues$data[i,3]/100,digits=3)
      }

    }
  )




  output$plot<-renderPlotly({

    plt<-
      ggplot(datavalues$data,aes(A,B))+
      geom_point()+
      geom_line()+
      xlab("A")+
      ylab("B")

    p<-config(ggplotly(plt),mathjax = 'cdn')
    p

  })