如何从R中向sed传递变量

3

我有一个文件名,它是一个变量,代表我感兴趣的路径。在脚本结束时,我想对它进行一些sed清理操作,但我不知道如何将变量传递给它。这是我的代码:

library(gdata)
filename = file.choose()
mydata = read.xls(file.choose())
newdata <- subset(mydata[1:3])
filename=paste(filename,".bed")
write.table(newdata,filename,sep="\t",row.names=FALSE, col.names=FALSE)
system("sed -i '' 's/\"//g'" filename)

但我遇到了以下错误 -
Error: unexpected symbol in "system("sed -i '' 's/\"//g'" filename"

我确定这与某种“疯狂”有关,但我想不出来是什么。

(注:原文中的引号应为双引号)

如果我设置intern=TRUE,那么它会显示错误:Error in system("sed -i '' 's/"//g'", filename, intern = TRUE) : 'ignore.stdout' 必须是TRUE或FALSE,如果我设置了这个,它会询问关于ignore.sterr,然后是wait=TRUE或FALSE等等。 - Sebastian Zeki
尝试使用以下命令:system("sed -i '' 's/\\"//g'" filename) - Avinash Raj
我遇到了这个错误:在“system(”sed -i'' 's / \" //”中出现意外的'/' - Sebastian Zeki
尝试使用 system("sed -i '' 's~\\"~~g'" filename),sed 命令周围的双引号是否必要? - Avinash Raj
system 需要一个字符输入,在 R 中这意味着您必须将其包裹在 "' 中。你的问题归结为如何创建一个包含 '" 的字符串。(我不知道如何实现或是否可能实现。) 此外请注意,\ 需要用 \ 转义。 - Roland
显示剩余5条评论
1个回答

3
尝试使用粘贴功能:
system(paste("sed -i '' 's/\"//g'",filename))

此外,当您将扩展名添加到filename时,您可能希望使用paste0而不是paste(或添加sep =“”参数),因为现在它会在文件名和扩展名之间添加一个空格。

filename=paste0(filename,".bed")

好的,已排序。谢谢NiCE。还要感谢你介绍了paste0给我,我的下一个问题是如何去掉那个空格。干杯! - Sebastian Zeki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接