闪亮 PCA 和 ggbiplot 着色的问题
Problems with Shiny PCA and ggbiplot coloring
我在 Whosebug 上看到了很多关于 Shiny 中 aes
映射问题的问题,其中大部分都通过在人们的代码中使用 aes_string()
来解决。不过,这些几乎完全与 x/y 值有关。
我的问题是在将 ggbiplot 用于 PCA 时出现的,并且与映射着色变量有关。我的应用程序允许客户端上传他们自己的文件,但我 运行 通过 mtcars
只是为了确保它是一个可重现的错误(它是)。这是上传代码:
ui.R
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Where the Flip are my colors?"),
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),','),
selectInput("variable",label = h5("Coloring Variable"),"")
),
mainPanel(
tableOutput("inputfile"),
plotOutput("PCA")
)
))
server.R
library(shiny)
shinyServer(function(input, output, session) {
upData <- reactive({if(is.null(input$file1))return(NULL)
inFile <- input$file1
dat <- read.csv(inFile$datapath)
return(dat)
})
output$inputfile <- renderTable({
upData()
})
observe({
updateSelectInput(
session,
"variable",
choices=names(upData()))
})
output$PCA <- renderPlot({
upData.pca <- prcomp(upData(), scale = TRUE)
ggbiplot(upData.pca, obs.scale = 1, var.scale = 1)
# + geom_point(aes_string(color=input$variable))
})
})
如果我按原样 运行 这段代码,它会提供我想要的上传数据框和 PCA 双标图。但是,当我取消对 geom_point
行的注释时,出现 "invalid argument to unary operator" 错误。我已经用 Shiny 完成了这个,代码 运行 用 mtcars
没问题。当我 运行 我的实际代码时,我得到一个 "object 'input' not found" 错误,所以我的玩具示例和我的实际问题不太一样,但我希望问题是相关的。
我查看了 Shiny 中关于 aes
的文档,并搜索了 Google 以寻找类似的问题,但未能找到解决方案。我会喜欢一些帮助。
使用 Gopala 的代码,我看到的错误是:
Warning: Error in [[: subscript out of bounds
Stack trace (innermost first):
84: FUN
83: lapply
82: aes_string
81: layer
80: geom_point
79: renderPlot [#17]
71: output$PCA
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
Don't know how to automatically pick scale for object of type tbl_df/tbl/data.frame. Defaulting to continuous.
Warning: Error in : Aesthetics must be either length 1 or the same as the data (32): colour, x, y
Stack trace (innermost first):
71: output$PCA
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
Warning: Error in eval: object 'drat' not found
Stack trace (innermost first):
71: output$PCA
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
这是我正在使用的代码,它有效:
library(shiny)
library(ggbiplot)
ui <- pageWithSidebar(
headerPanel("Where the Flip are my colors?"),
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),','),
selectInput("variable",label = h5("Coloring Variable"),"")
),
mainPanel(
tableOutput("inputfile"),
plotOutput("PCA")
)
)
server <- function(input, output, session) {
upData <- reactive({if(is.null(input$file1)) return(mtcars)
inFile <- input$file1
dat <- read.csv(inFile$datapath)
return(dat)
})
output$inputfile <- renderTable({
upData()
})
observe({
updateSelectInput(session,
"variable",
choices=names(upData()))
})
output$PCA <- renderPlot({
upData.pca <- prcomp(upData(), scale = TRUE)
ggbiplot(upData.pca, obs.scale = 1, var.scale = 1) +
geom_point(aes_string(color=input$variable))
})
}
shinyApp(ui = ui, server = server)
嗯,终于明白了
geom_point(aes_string(color=upData()[,input$variable]))
出于我对 R 的有限理解之外的任何原因,我必须定义初始反应值 upData()
。
希望这能帮助其他人避免几天的痛苦。
我在 Whosebug 上看到了很多关于 Shiny 中 aes
映射问题的问题,其中大部分都通过在人们的代码中使用 aes_string()
来解决。不过,这些几乎完全与 x/y 值有关。
我的问题是在将 ggbiplot 用于 PCA 时出现的,并且与映射着色变量有关。我的应用程序允许客户端上传他们自己的文件,但我 运行 通过 mtcars
只是为了确保它是一个可重现的错误(它是)。这是上传代码:
ui.R
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Where the Flip are my colors?"),
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),','),
selectInput("variable",label = h5("Coloring Variable"),"")
),
mainPanel(
tableOutput("inputfile"),
plotOutput("PCA")
)
))
server.R
library(shiny)
shinyServer(function(input, output, session) {
upData <- reactive({if(is.null(input$file1))return(NULL)
inFile <- input$file1
dat <- read.csv(inFile$datapath)
return(dat)
})
output$inputfile <- renderTable({
upData()
})
observe({
updateSelectInput(
session,
"variable",
choices=names(upData()))
})
output$PCA <- renderPlot({
upData.pca <- prcomp(upData(), scale = TRUE)
ggbiplot(upData.pca, obs.scale = 1, var.scale = 1)
# + geom_point(aes_string(color=input$variable))
})
})
如果我按原样 运行 这段代码,它会提供我想要的上传数据框和 PCA 双标图。但是,当我取消对 geom_point
行的注释时,出现 "invalid argument to unary operator" 错误。我已经用 Shiny 完成了这个,代码 运行 用 mtcars
没问题。当我 运行 我的实际代码时,我得到一个 "object 'input' not found" 错误,所以我的玩具示例和我的实际问题不太一样,但我希望问题是相关的。
我查看了 Shiny 中关于 aes
的文档,并搜索了 Google 以寻找类似的问题,但未能找到解决方案。我会喜欢一些帮助。
使用 Gopala 的代码,我看到的错误是:
Warning: Error in [[: subscript out of bounds
Stack trace (innermost first):
84: FUN
83: lapply
82: aes_string
81: layer
80: geom_point
79: renderPlot [#17]
71: output$PCA
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
Don't know how to automatically pick scale for object of type tbl_df/tbl/data.frame. Defaulting to continuous.
Warning: Error in : Aesthetics must be either length 1 or the same as the data (32): colour, x, y
Stack trace (innermost first):
71: output$PCA
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
Warning: Error in eval: object 'drat' not found
Stack trace (innermost first):
71: output$PCA
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
这是我正在使用的代码,它有效:
library(shiny)
library(ggbiplot)
ui <- pageWithSidebar(
headerPanel("Where the Flip are my colors?"),
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',c(Comma=',',Semicolon=';',Tab='\t'),','),
selectInput("variable",label = h5("Coloring Variable"),"")
),
mainPanel(
tableOutput("inputfile"),
plotOutput("PCA")
)
)
server <- function(input, output, session) {
upData <- reactive({if(is.null(input$file1)) return(mtcars)
inFile <- input$file1
dat <- read.csv(inFile$datapath)
return(dat)
})
output$inputfile <- renderTable({
upData()
})
observe({
updateSelectInput(session,
"variable",
choices=names(upData()))
})
output$PCA <- renderPlot({
upData.pca <- prcomp(upData(), scale = TRUE)
ggbiplot(upData.pca, obs.scale = 1, var.scale = 1) +
geom_point(aes_string(color=input$variable))
})
}
shinyApp(ui = ui, server = server)
嗯,终于明白了
geom_point(aes_string(color=upData()[,input$variable]))
出于我对 R 的有限理解之外的任何原因,我必须定义初始反应值 upData()
。
希望这能帮助其他人避免几天的痛苦。