我正在尝试使用闪亮的网络应用程序为数据框创建一个新列 如果我们在此应用程序的公式选项中键入公式,它应该接收该公式并应创建数据框的新列。我试过attach(),subset()函数,没用... ... 能帮帮我吗。
UI:
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()
})
})
})
答案 0 :(得分:0)
我认为你应该从dplyr包中尝试mutate_。 像
这样的东西 mutate_formula <- setNames(lazyeval::interp(input$newformula), input$newvar)
new_dataset <- dataset() %>%
mutate_(.dots = mutate_formula)