3

光沢のある Web アプリを使用して、データ フレームに新しい列を作成しようとしています。
このアプリの数式オプションに数式を入力すると、その数式を受け取り、データ フレームに新しい列を作成する必要があります。attach()、subset()関数を試しましたが、役に立ちません...
助けてください。

うい:

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel( "Data Frame", "Data Frame"),
  sidebarPanel(

    wellPanel(

      fileInput('file', 'Select csv file', accept=c('text/csv') ),

      checkboxInput('header', 'Header', TRUE),

      gsub("label class=\"radio\"", "label class=\"radio inline\"",
           radioButtons('sep', 'Separator', c(Comma=',', Semicolon=';', Tab='\t' )))

    ),

    wellPanel(
      checkboxInput('addcol', 'Create New Variable', FALSE),

      conditionalPanel(condition="input.addcol!=0",
                       textInput('newvar', "Variable name","" ),
                       textInput('newformula', "Formula",""),
                       actionButton("apply","Apply Changes")
      )      
    )

  ),

mainPanel(
  tableOutput('contents') 
)
)) 

サーバ:

library(shiny)
library(stats)
library(reshape)
require(utils)
shinyServer(function(input,output,session){

  dataset = reactive({
    inFile<-input$file
    if(is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath, header=input$header, sep=input$sep)
  })

  alterdata = reactive({
    if(input$apply==0){
      dataset<-transform(dataset(), new='')
      dataset <- rename(dataset, c(new=input$newvar))
      dataset
    }
    else
    {
      attach(dataset())
      dataset<-dataset()
      dataset$new<-cat(input$newformula, "\n")
      detach(dataset())
      dataset <- rename(dataset, c(new=input$newvar))
      dataset
    }

    #dataset
    })


  data = reactive({
    if(input$addcol!=0)
    {
      alterdata()
    }
    else
    {
      dataset()
    }
  })    

  output$contents<-renderTable({
    if (is.null(input$file)) { return() }                            
    data()
  })

  })

})
4

1 に答える 1

0

dplyr パッケージの mutate_ を試す必要があると思います。何かのようなもの

        mutate_formula <- setNames(lazyeval::interp(input$newformula), input$newvar)
        new_dataset <- dataset() %>%
            mutate_(.dots = mutate_formula)
于 2015-05-19T10:47:33.327 に答える