我正在尝试创建一个闪亮的用户界面来输入CSV,执行配对的t检验(等方差)并从样本数据集中生成热图。
我已经能够生成UI CSV上载选项卡,但是,我现在正在努力进行t检验和p值选项卡,我继续收到此错误消息:
警告:错误:评估嵌套太深:无限递归/ options(expressions =)? 90:
shinyServer <- function(input, output, session){
data5<- reactive({
req(input$file1)
data5<-read.csv(input$file1$datapath,
header = input$header,
sep = input$sep,
quote = input$quote)
})
output$contents <- renderTable({
req(input$file1)
if(input$disp == "head") {
return(head(data5()))
}
else {
return(data5())
}
})
####ttests
data1 <- reactive({
data1 <- data.matrix(data5())
})
ctrl <- reactive({
ctrl <- data1()[, c(2:11)]
})
smple <- reactive({
smple <- data1()[, c(12:21)]
})
vector1 <- c(1:10)
pvalue <- c()
pval <- reactive ({
for (i in vector1) {
pvalue[i] <-
t.test(ctrl()[i, ],
smple()[i, ],
paired = FALSE,
var.equal = FALSE)$p.value
}
pvalue
})
signif <- reactive({
sig <- c()
for (n in vector1) {
if (pval()[n] < 0.05) {
sig <- append(sig, n)
}
}
sig
})
genecol <- reactive({
genecol <- data5()[, 1]
})
P.Vals <- reactive({
as.character(P.Vals())
})
data6 <- reactive({
data6 < -data.frame(genecol(), P.Vals())
})
output$pvalue <- renderTable(data6())
}
UI:
library(shiny)
library(shinythemes)
ui <- fluidPage(
####name app
titlePanel("Uploading Files"),
tabsetPanel(
tabPanel("Upload CSV"),
# Sidebar
sidebarLayout(
sidebarPanel(
###input option CSV file
fileInput(
"file1",
"Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")
),
tags$hr(),
###check if CSV has a header
checkboxInput("header", "Header", TRUE),
###format text file into table with separator (comma,semicolon,tab)
radioButtons(
"sep",
"Separator",
choices = c(
Comma = ",",
Semicolon = ";",
Tab = "\t"
),
selected = ","
),
tags$hr(),
####select head of data or all
radioButtons(
"disp",
"Display",
choices = c(Head = "head",
All = "all"),
selected = "head"
)
),
####output panel
mainPanel(# Output: DATA
tableOutput("contents"))
)
),
tabPanel("T-Test",
h4("pvalue"),
tableOutput("pvalue"))
)
我知道这可能很复杂,但是我是一个完整的初学者,真的很难理解我的观点
答案 0 :(得分:1)
没有一个可复制的示例(请参见注释),我想这可能是您的反应。即:
data1 <- reactive({
data1 <- data.matrix(data5())
})
反应式有点像一个函数,因为它返回最后一个值(或通过return语句传递的任何值)。在您的代码中,您似乎正在为其自身内的值重新分配反应式data1
。由于作用域可能不是这种情况,但是由于递归错误,这是我的第一个猜测。
我建议您首先将反应性编辑为:
data1 <- reactive({
data.matrix(data5())
})
编辑:
找到了:
P.Vals <- reactive({
as.character(P.Vals())
})
这绝对是一个递归表达式。这是你的罪魁祸首。