我具有以下服务器功能,该功能从ui的inputFile选项卡中获取两个输入文件。
library(shiny)
ui <- fluidPage(
fileInput("CF", label = "CF"),
fileInput("ED", label = "ED"),
actionButton("Run", "Run")
)
server <- function(input, output, session) {
cf_file <- reactive({
cfFile <- input$CF
return(cfFile$datapath)
})
ed_file <- reactive({
edFile <- input$ED
return(edFile$datapath)
})
table_content <- eventReactive(input$Run, {
req(input$ED$datapath)
req(input$CF$datapath)
file_ed <- ed_file()
file_cf <- cf_file()
##the system command uses external program which takes input files (file_cf and file_ed) from fileInput. The command will look like:
#/bin/qt con ed -i file_cf -p file_ed > file_ed.db#
system(paste("/bin/qt con ed -i", file_cf, "-p", file_ed, ">", file_ed,".db" ))
})
}
shinyApp(ui, server)
我在这里有两个问题:
1)系统命令在此处不起作用,并显示错误消息:
qt: Error reading file '/var/folders/z0/kms9x7hd6hgdtbtk3kxnjcjxw2_l57/T//RtmpISFd3V/aac5eff9961beb644d8ec5e0/0.phe': End of file
系统命令正在获取两个输入文件,并通过在输入文件之一中添加“ .db”来写入输出文件。谁能指出上面的系统命令出了什么问题?
我在https://community.rstudio.com/t/system-call-within-r-shiny/11405/3
上遵循了类似的查询
2)如果系统命令有效,我如何将输出文件中的输出呈现为table_content?
尝试与错误:
我尝试使用paste0()
,但没有运气,这次出现了另一个错误,即它不读取输入文件file_cf和file_ed。
system(paste0("/bin/qt con ed -i ", file_cf, " -p ", file_ed, " > ", file_ed,".db"))
`Error accessing file '/var/folders/z0/kms9x7hd6hgdtbtk3kxnjcjxw2_l57/T//RtmpjqfSir/6a3263bc18297e4b6567979e/0.cf -p/var/folders/z0/kms9x7hd6hgdtbtk3kxnjcjxw2_l57/T//RtmpjqfSir/02b964d65d0f0b1a9476a8be/0.ed': No such file or directory`
然后使用system2:
system2(paste0("/bin/qt con ed -i ",file_cf, " -p ", file_ed, " > ", file_ed,".db" ))
sh: /bin/qt con ed -i /var/folders/z0/kms9x7hd6hgdtbtk3kxnjcjxw2_l57/T//RtmpjqfSir/ebc57ae122e171f074281112/0.cf -p /var/folders/z0/kms9x7hd6hgdtbtk3kxnjcjxw2_l57/T//RtmpjqfSir/15a75f8fbe5992bd82ab8a22/0.ed > /var/folders/z0/kms9x7hd6hgdtbtk3kxnjcjxw2_l57/T//RtmpjqfSir/15a75f8fbe5992bd82ab8a22/0.ed.db: No such file or directory
Warning in system2(paste0("/bin/qt con ed -i ", :
error in running command
R上面的sh:命令在R外部的shell中运行时使用它生成的tmp路径生成,并且可以在tmp路径中看到输出文件。但是,当使用system
和paste0
在R中运行它时,会出现上述错误。
答案 0 :(得分:0)
我不知道您正在使用哪些文件作为输入,因此我只是使用图像并查看了即将出现的系统命令,就像这样:
/bin/qt con ed -i C:\Users\**\AppData\Local\Temp\RtmpohWHcF/08b770ef9620ce852841b792/0.png -p C:\Users\**\AppData\Local\Temp\RtmpohWHcF/b2fdf736bf904194d709b66c/0.png > C:\Users\**\AppData\Local\Temp\RtmpohWHcF/b2fdf736bf904194d709b66c/0.png .db
问题出在行尾,因为.db
之前有一个空格。
我不知道这是否可以解决您的问题,但这可能是第一步;)
所以只需尝试以下命令:
paste0("/bin/qt con ed -i ", file_cf, " -p ", file_ed, " > ", file_ed,".db")
它使用paste0
,其中不包含空格,因此您将它们包括在字符串部分中。但是,系统命令的最后一个输入将具有双扩展名(例如.png.db
)。要摆脱这种情况,您可以使用:
file_ed2 <- tools::file_path_sans_ext(file_ed)
并将其分配给最后一个系统cmd输入。
如果还是不能正常运行,您还可以尝试使用system2
的{{1}}命令代替。有时候对我来说效果更好。
要回答问题2 ,我需要知道它是什么样的输出以及如何加载和呈现它?但是无论如何,也许system
函数可以在这里工作。
-应用
reactivePoll