如何在 R Shiny 应用程序中操作数据框
how to manipulate dataframe in R shiny app
我需要一个关于闪亮代码的助手。我想通过将数据帧输入分成列向量进行计算来操纵数据帧输入,但我一直收到此错误
Warning in <reactive>(...): NAs introduced by coercion
代码如下
library(shiny)
ui <- fluidPage(
# dataset
data <- data.frame(e1 = c(3, 7, 2, 14, 66),
e2 = c(2, 16, 15, 66, 30),
n1 = c(18, 25, 45, 62, 81),
n2= c(20, 30, 79, 64, 89))
# Application title
titlePanel("Demo"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
# Input: Upload file
fileInput(inputId = 'file', label = 'upload the file')
),
# Display Output
mainPanel(
uiOutput("final")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
# separating the dataframe into 4 column vectors
e1 <- reactive(as.numeric(input$file[,1]))
e2 <- reactive(as.numeric(input$file[,2]))
n1 <- reactive(as.numeric(input$file[,3]))
n2 <- reactive(as.numeric(input$file[,4]))
# File Upload function
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read.table(file = file1$datapath, sep = ',', header = TRUE)
})
output$result <- renderUI({
y <- (e1()/n1()) - (e2()/n2())
lg_y <- log(y)
v2 <- ((n1() - e1())/e1() * n1()) + ((n2() - e2())/e2() * n2())
w <- 1/v2
w1 <- sum(w)
w2 <- sum(w^2)
c <- w1 - (w2/w1)
s2 <- w * lg_y
ybar <- sum(s2)/sum(w)
Q <- sum(w*((lg_y - ybar)^{2}))# Cochrane homogeneity test statistic
Q.pval <- reactive(pchisq(Q, k() - 1,lower.tail = FALSE))
Isqd <- max(100*((Q-(k()-1))/Q),0)
})
}
# Run the application
shinyApp(ui = ui, server = server)
我几乎搜索了这个论坛上的每个问题,但没有看到问题的答案在哪里。期待您的帮助
仍然不能 运行 上面的代码,因为你没有定义函数 k()
。另外仅供参考,您的 renderUI
设置为 "result"
但您的 uiOutput 设置为 "final"
.
您收到警告 Warning in <reactive>(...): NAs introduced by coercion
因为您的真实数据集可能包含非数字。我没有发现您在上面提供的数据集有任何问题。
有几个前进的方向:
1) 在处理数据之前编写一个函数来删除所有非数字。有关示例,请参阅 here。
2) 保留警告,毕竟这是一个警告,所以它不会阻止您的代码从 运行ning 开始。目前它把你的非数字变成 NA
3) 使用 suppressWarnings()
但通常不推荐这样做。
我确实有一个建议来清理你的代码:
# File Upload function
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read.table(file = file1$datapath, sep = ',', header = TRUE, stringsAsFactors = FALSE)
})
# separating the dataframe into 4 column vectors
e1 <- reactive(as.numeric(data()[,1]))
e2 <- reactive(as.numeric(data()[,2]))
n1 <- reactive(as.numeric(data()[,3]))
n2 <- reactive(as.numeric(data()[,4]))
我需要一个关于闪亮代码的助手。我想通过将数据帧输入分成列向量进行计算来操纵数据帧输入,但我一直收到此错误
Warning in <reactive>(...): NAs introduced by coercion
代码如下
library(shiny)
ui <- fluidPage(
# dataset
data <- data.frame(e1 = c(3, 7, 2, 14, 66),
e2 = c(2, 16, 15, 66, 30),
n1 = c(18, 25, 45, 62, 81),
n2= c(20, 30, 79, 64, 89))
# Application title
titlePanel("Demo"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
# Input: Upload file
fileInput(inputId = 'file', label = 'upload the file')
),
# Display Output
mainPanel(
uiOutput("final")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
# separating the dataframe into 4 column vectors
e1 <- reactive(as.numeric(input$file[,1]))
e2 <- reactive(as.numeric(input$file[,2]))
n1 <- reactive(as.numeric(input$file[,3]))
n2 <- reactive(as.numeric(input$file[,4]))
# File Upload function
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read.table(file = file1$datapath, sep = ',', header = TRUE)
})
output$result <- renderUI({
y <- (e1()/n1()) - (e2()/n2())
lg_y <- log(y)
v2 <- ((n1() - e1())/e1() * n1()) + ((n2() - e2())/e2() * n2())
w <- 1/v2
w1 <- sum(w)
w2 <- sum(w^2)
c <- w1 - (w2/w1)
s2 <- w * lg_y
ybar <- sum(s2)/sum(w)
Q <- sum(w*((lg_y - ybar)^{2}))# Cochrane homogeneity test statistic
Q.pval <- reactive(pchisq(Q, k() - 1,lower.tail = FALSE))
Isqd <- max(100*((Q-(k()-1))/Q),0)
})
}
# Run the application
shinyApp(ui = ui, server = server)
我几乎搜索了这个论坛上的每个问题,但没有看到问题的答案在哪里。期待您的帮助
仍然不能 运行 上面的代码,因为你没有定义函数 k()
。另外仅供参考,您的 renderUI
设置为 "result"
但您的 uiOutput 设置为 "final"
.
您收到警告 Warning in <reactive>(...): NAs introduced by coercion
因为您的真实数据集可能包含非数字。我没有发现您在上面提供的数据集有任何问题。
有几个前进的方向:
1) 在处理数据之前编写一个函数来删除所有非数字。有关示例,请参阅 here。
2) 保留警告,毕竟这是一个警告,所以它不会阻止您的代码从 运行ning 开始。目前它把你的非数字变成 NA
3) 使用 suppressWarnings()
但通常不推荐这样做。
我确实有一个建议来清理你的代码:
# File Upload function
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read.table(file = file1$datapath, sep = ',', header = TRUE, stringsAsFactors = FALSE)
})
# separating the dataframe into 4 column vectors
e1 <- reactive(as.numeric(data()[,1]))
e2 <- reactive(as.numeric(data()[,2]))
n1 <- reactive(as.numeric(data()[,3]))
n2 <- reactive(as.numeric(data()[,4]))