命令中使用字符串变量值与直接使用字符串的问题排查
问题分析与解决方案
你的核心问题是**InputIs是单个字符串而非字符向量**,qpdf::pdf_combine的input参数需要接收多个独立的文件名元素组成的字符向量,而非包含多个文件名的单个字符串。
为什么原代码无法运行
你定义的InputIs是一个完整的字符串:
InputIs <- '"AV_SEVER_0002005.pdf","AV_SEVER_0002006.pdf","AV_SEVER_0002007.pdf"'
当你传入c(InputIs)时,得到的是长度为1的向量,pdf_combine会把这个长字符串当成一个单独的文件名去查找,自然找不到对应文件。而直接写c("AV_SEVER_0002005.pdf","AV_SEVER_0002006.pdf","AV_SEVER_0002007.pdf")时,得到的是包含3个独立文件名的字符向量,符合函数要求。
解决方案1:直接构造正确的字符向量
这是最简洁的方式,直接用c()创建包含多个文件名的字符向量:
# 正确构造字符向量,每个文件名是独立元素 InputIs <- c("AV_SEVER_0002005.pdf","AV_SEVER_0002006.pdf","AV_SEVER_0002007.pdf") OutputIs <- "AV_SEVER_0002005.pdf" # 正常运行 qpdf::pdf_combine(input = InputIs, output = file.path("Final", OutputIs))
推荐用file.path()代替paste()拼接路径,它会自动适配Windows/macOS的路径分隔符,不需要手动写双反斜杠。
解决方案2:将现有字符串转换为字符向量
如果InputIs是从外部文本/其他来源获取的带引号拼接字符串,可以通过字符串处理转换为字符向量:
InputIs <- '"AV_SEVER_0002005.pdf","AV_SEVER_0002006.pdf","AV_SEVER_0002007.pdf"' OutputIs <- "AV_SEVER_0002005.pdf" # 拆分字符串并去除引号,得到字符向量 input_vec <- gsub('"', '', strsplit(InputIs, ",")[[1]]) # 运行合并命令 qpdf::pdf_combine(input = input_vec, output = file.path("Final", OutputIs))
内容的提问来源于stack exchange,提问作者Scottieie
相关产品推荐
相关产品推荐

