好吧我确定这是一个我已经错过的一些显而易见的事情,但我是R的新手并且创造了闪亮的应用程序,但我正在尝试自己教他们两个。
我有一个RNA值的数据表(来自约150个捐赠者的> 20,000个基因),我正在尝试创建一个简单的闪亮应用程序从列表中获取2个基因,并显示来自所有150个捐赠者的表达值的散点图彼此。后来我想对数据做更多的事情,但我很难让这个简单的位先运行!
下面的代码是我的应用程序的当前简单状态。它仍然非常简单,但结果图只显示每个基因的单个点,代码下方的图像。当我想要显示的是表格中相对值的散点图
数据集的截断版本(仍然产生相同的错误)也在下面,以及str()
结果。
library(shiny)
library(ggplot2)
GeneNames <- colnames(Short_cortex5)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectizeInput(inputId = "gene_X",
label = "Select gene X:",
choices = GeneNames),
selectizeInput(inputId = "gene_Y",
label = "Select gene Y:",
choices = GeneNames)
),
mainPanel(
plotOutput(outputId = "corrPlot")
)
)
)
server <- function(input, output) {
output$corrPlot <- renderPlot({
ggplot(data = Short_cortex5, aes(x=input$gene_X, y=input$gene_Y)) +
geom_point()
})
}
shinyApp(ui = ui, server = server)
> str(Short_cortex5)
'data.frame': 8 obs. of 8 variables:
$ MARC2 : num 15.3 16.1 17.3 11.4 21.8 ...
$ MARCH1: num 2.5 4.7 2.46 3.11 6.12 ...
$ SEPT1 : num 1.068 0.298 0.381 0.555 0.756 ...
$ DEC1 : num 0.0261 0 0 0.0226 0 ...
$ MARCH2: num 81.2 68.9 63.4 84.5 88.5 ...
$ SEPT2 : num 66.1 89 65.2 49 106.2 ...
$ MARCH3: num 1.756 1.348 1.25 0.451 2.137 ...
$ SEPT3 : num 103 208 190 202 223 ...
> Short_cortex5
MARC2 MARCH1 SEPT1 DEC1 MARCH2 SEPT2 MARCH3 SEPT3
1 15.30 2.501 1.0680 0.02610 81.15 66.14 1.7560 103.3
2 16.07 4.700 0.2980 0.00000 68.90 88.95 1.3480 207.7
3 17.27 2.462 0.3812 0.00000 63.41 65.20 1.2500 190.5
4 11.37 3.107 0.5550 0.02261 84.53 48.98 0.4507 201.9
5 21.76 6.123 0.7558 0.00000 88.49 106.20 2.1370 223.0
6 15.55 4.239 0.5859 0.03581 58.91 69.80 0.5515 214.1
7 16.74 4.596 0.6551 0.02627 70.38 68.50 0.8489 224.4
8 11.48 2.167 0.3567 0.01090 60.14 74.04 1.1210 164.9
嗨,你需要在你的ggplot调用中从标准aes
更改为aes_string
server <- function(input, output) {
output$corrPlot <- renderPlot({
ggplot(data = Short_cortex5, aes_string(x=input$gene_X, y=input$gene_Y)) +
geom_point()
})
}
这是因为输入的值是字符向量
希望这可以帮助!!
你所有的应用程序目前正在做的是将基因NAME相互映射,因此你只得到一分。
您想告诉R使用与该名称对应的变量并绘制该变量。最简单的方法是使用Non-standard evaluation
如下:
require(rlang)
output$corrPlot <- renderPlot({
ggplot(data = Short_cortex5, aes(x=!!sym(input$gene_X), y=!!sym(input$gene_Y))) +
geom_point()
})
编辑:
根据其他回复,这可能不是我声称的最简单方法!
我认为值得注意的是release notes的ggplot2 V3.0.0
:
aes()现在支持quasiquotation,以便您可以使用!!,!!!和:=。这取代了现在软弃用的aes_()和aes_string()(但会保留很长时间)。
你可以使用它非常通用的get
而不是ggplot
特有的,可以用于你可能有的其他图表和表格
output$corrPlot <- renderPlot({
ggplot(data = mtcars, aes(x=get(input$gene_X), y=get(input$gene_Y))) +
geom_point()
})