我正在尝试使用diffR函数接受两个.R文件来比较闪亮应用程序中的差异。有人可以上传两个R文件,然后它将使用diffR进行输出。
我可以在本地运行代码,在本地将文件1和文件2定义为目录,然后并排输出代码以显示差异。它突出显示了差异,然后可以进行调整。
server <- function(input, output, session) {
output$contents <- renderPrint({
info_old <- input$old_file
if(is.null(info_old))
return(null)
df_old <- readLines(info_old$datapath)
df_old
})
output$new_contents <- renderPrint({
info_new <- input$new_file
if(is.null(info_new)){return()}
df_new <- readLines(info_new$datapath)
df_new
})
output$exdiff <- renderDiffr({
diffr(info_old(), info_new(), wordWrap = input$wordWrap,
before = "Original_File", after = "New File")
})
}
我知道这很简单,其中old_file和new_file都在生成侧。此堆栈答案准确显示了我在寻找什么:
In R, find whether two files differ
使用diffr软件包的位置。我只是希望用户能够上传两个R文件,所以并排比较而不是全局定义文件a和b。
答案 0 :(得分:1)
您可以使用上载文件给定的数据路径:input$files[[1, 'datapath']]
。
如果您愿意,请对您的(好的)尝试做些小的评论。 diffr()
函数要求连接到文件而不是内容本身。我也遇到了同样的陷阱。因此,如果您删除代码中的readLines()
,则应该非常接近。
您可能需要进行测试,以确保上传的文件的长度不小于或大于2,以确保应用程序在发生以下情况时不会崩溃:仅提供一个文件。
可复制的示例:
write.csv2(
x = "diff same",
file = "test.csv"
)
write.csv2(
x = "diffhere same",
file = "test2.csv"
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput(
inputId = "files",
label = "Choose CSV File",
multiple = TRUE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")
)
),
mainPanel(
tableOutput("contents"),
diffrOutput("exdiff")
)
)
)
server <- function(input, output) {
output$exdiff <- renderDiffr({
req(input$files)
diffr(
file1 = input$files[[1, 'datapath']],
file2 = input$files[[2, 'datapath']],
wordWrap = TRUE,
before = "f1",
after = "f2"
)
})
}
shinyApp(ui, server)