1
Shinyの反応フレームからデータフレームを作成する際に問題が発生しました。このアプリでは、ユーザーがいくつかのデータをアップロードすることができるため、データセットは反応的です。それは、ユーザが回帰に渡される入力変数と出力変数を選択し、プロットが生成されるようにします。as.data.frame.defaultのエラー:「c( "reactiveExpr"、 "reactive")」をShinyのdata.frameに強制できません
Error in as.data.frame.default: cannot coerce class "c("reactiveExpr", "reactive")" to a data.frame
私はそのユーザーアップロードされたデータのデータフレームであることを想定している私のd.f変数から来ると信じています: 私はというエラーを得続けます。私はインターネットを精練した後に回避策を確保することができませんでした。 ご協力いただければ幸いです。これまでのコードは以下の通りです。
library(shiny)
library(triangle)
library(readxl)
library(leaps)
library(coefplot)
library(relaimpo)
library(data.table)
library(XLConnect)
library(xlsx)
ui <- fluidPage(
titlePanel("Hi"),
sidebarLayout(position = "left",
sidebarPanel(
conditionalPanel(condition = "input.tabs1==1",
tags$style(type='text/css', ".well { max-width: 20em; }"),
# Tags:
tags$head(
tags$style(type="text/css", "select[multiple] { width: 100%; height:10em}"),
tags$style(type="text/css", "select { width: 100%}"),
tags$style(type="text/css", "input { width: 19em; max-width:100%}")
),
# Select filetype:
selectInput("readFunction", "Function to read data:", c(
# Base R:
"read.table",
"read.csv",
"read.csv2",
"read.delim",
"read.delim2",
"readWorksheet",
"read_excel",
"read.xlsx"
)),
# Argument selecter:
htmlOutput("ArgSelect"),
# Argument field:
htmlOutput("ArgText"),
# Upload data:
fileInput("file", "Upload data-file:"),
# Variable selection:
htmlOutput("varselect"),
br(),
uiOutput("invar"),
br(),
uiOutput("outvar"),
textInput("name","Dataset name:","Data")),
conditionalPanel(condition = "input.tabs1==2",
#fileInput('file', 'Choose file to upload.'),
#selectizeInput('invar',"Select Invar", choices = varnames, multiple = TRUE),
#selectizeInput('outvar',"Select Outvar", choices = predictors, multiple = FALSE),
radioButtons('LM',"Select Regression",choices = list("LM" = 1, "LM2" = 2),selected = 1)
)),
mainPanel(
tabsetPanel(id="tabs1",
tabPanel("Data File",value = 1,tableOutput("table")),
tabPanel("Plot",value=2,tableOutput("Data"),plotOutput("Plot"))
)
)
))
server<-function(input, output) {
options(shiny.maxRequestSize=30*1024^2)
### Argument names:
ArgNames <- reactive({
Names <- names(formals(input$readFunction)[-1])
Names <- Names[Names!="..."]
return(Names)
})
# Argument selector:
output$ArgSelect <- renderUI({
if (length(ArgNames())==0) return(NULL)
selectInput("arg","Argument:",ArgNames())
})
## Arg text field:
output$ArgText <- renderUI({
fun__arg <- paste0(input$readFunction,"__",input$arg)
if (is.null(input$arg)) return(NULL)
Defaults <- formals(input$readFunction)
if (is.null(input[[fun__arg]]))
{
textInput(fun__arg, label = "Enter value:", value = deparse(Defaults[[input$arg]]))
} else {
textInput(fun__arg, label = "Enter value:", value = input[[fun__arg]])
}
})
### Data import:
Dataset <- reactive({
if (is.null(input$file)) {
# User has not uploaded a file yet
return(data.frame())
}
args <- grep(paste0("^",input$readFunction,"__"), names(input), value = TRUE)
argList <- list()
for (i in seq_along(args))
{
argList[[i]] <- eval(parse(text=input[[args[i]]]))
}
names(argList) <- gsub(paste0("^",input$readFunction,"__"),"",args)
argList <- argList[names(argList) %in% ArgNames()]
Dataset <- as.data.frame(do.call(input$readFunction,c(list(input$file$datapath),argList)))
return(Dataset)
})
# Select variables:
output$varselect <- renderUI({
if (identical(Dataset(), '') || identical(Dataset(),data.frame())) return(NULL)
# Variable selection:
selectInput("vars", "Variables to use:",
names(Dataset()), names(Dataset()), multiple =TRUE)
})
# Show table:
output$table <- renderTable({
if (is.null(input$vars) || length(input$vars)==0) return(NULL)
return(Dataset()[,input$vars,drop=FALSE])
})
#################################################################################
varnames<-reactive({
names(input$readFunction)
})
output$invar<-renderUI({
selectizeInput('invar',"Select Invar", choices = names(Dataset()), multiple = TRUE)
})
output$outvar<-renderUI({
selectizeInput('outvar',"Select Outvar", choices = names(Dataset()), multiple = TRUE)
})
d.f<-Dataset
output$Plot <- renderPlot({
SelectedVars <- input$invar
vartopredict <- input$outvar
fmla <- reformulate(SelectedVars, response = vartopredict)
pred.model=lm(fmla,d.f)
plot(pred.model)
abline(a=0,b=1,col="red")
})
}
shinyApp(ui = ui, server = server)
'd.f'の代わりに' d.f() 'を使ってみてください。 'reactive'値は' data.frame'ではありません。 'reactive'値の中の' data.frame'にアクセスするには '()'を使います。 – CPak
@ChiPak兄私はあなたに感謝する方法を知らない!私はそれを理解しようとした年を費やしました。本当にありがとう。 – John