writeLines()未生成有效的生成文件

writeLines()未生成有效的生成文件,r,makefile,gnu-make,R,Makefile,Gnu Make,我试图使用R自动生成一个makefile,但遇到了一个非常奇怪的问题 生成文件时使用以下代码: v <- "histogram.tsv: histogram.r\r\tRscript histogram.r" fileConn <- file("Makefile") writeLines(v, fileConn) close(fileConn) 这个Makefile不会生成,但是当我在“Rscript”之前手动键入选项卡时,它会生成!将write.lines生成的文本与手动生成的

我试图使用R自动生成一个makefile,但遇到了一个非常奇怪的问题

生成文件时使用以下代码:

v <- "histogram.tsv: histogram.r\r\tRscript histogram.r"
fileConn <- file("Makefile")
writeLines(v,  fileConn)
close(fileConn)

这个Makefile不会生成,但是当我在“Rscript”之前手动键入选项卡时,它会生成!将write.lines生成的文本与手动生成的文本进行比较时,
idential()
返回
TRUE

在LinuxMint上测试时,它运行良好。当涉及到回车字符(通常在windows中使用)时,您的发行版很可能无法原谅。您可以尝试删除回车符或使用dos2unix

在DOS/Windows文本文件中,换行符(也称为换行符)是 两个字符的组合:回车符(CR)后跟 线路馈电(左前)。在Unix文本文件中,换行符是单个字符: 线路馈电(LF)。在Mac文本文件中,在Mac OS X之前,换行符 是单回车(CR)字符。现在Mac OS使用Unix 样式(左)换行符

在本例中,还需要插入换行符,因此设置
v
,如下所示:

v <- "histogram.tsv: histogram.r\n\tRscript histogram.r"

顺便问一下,你是说
writeline(v,fileConn)
而不是
writeline(make,fileConn)
?这更有道理。哦,我知道,我会等一下,不,我认为代码是正确的。我正在将向量
v
写入文件连接
Makefile
我更改了它。最初是
writeLines(make,fileConn)
。可能是回车在
v
中造成了问题。尝试用换行符替换它。
sudo apt-get install dos2unix
dos2unix Makefile
v <- "histogram.tsv: histogram.r\n\tRscript histogram.r"
target: dependencies; \
command1; \
command2