Search code examples
rescapingquotes

having R print a system call that contains "", '', and escape character \


I need to run a perl command from within an R script. I would normally do this via:

system(paste0('my command'))

However, the command I want to paste contains both single and double quotes and an escape character. Specifically, I would like to paste this command:

perl -pe '/^>/ ? print "\n" : chomp' in.fasta | tail -n +2 > out.fasta

I have tried escaping the double quotes with more escape characters, which allows me to pass the command, but it then prints all 3 escape characters, which causes the command to fail. Is there a good way around this, such that I can save the above perl line as a string in R, that I can then pass to the system() function?


Solution

  • Hey I haven't tested your particular perl call (since it involves particular file/directory etc) but tried something trivial by escaping the quotes and it seems to work. You might want to refer this question for more as well. My approach,

    # shouldnt have any text expect for an empty string
    my_text <- try(system(" perl -e 'print \"\n\"' ", intern = TRUE))
    my_text
    
    [1] ""
    
    
    # should contain the string - Hello perl from R!
    my_text2 <- try(system(" perl -e 'print \"Hello perl from R!\"' ", intern = TRUE))
    my_text2
    
    [1] "Hello perl from R!"
    

    So based on the above trials I think this should work for you -

    try(system(command = "perl -pe '/^>/ ? print \"\n\" : chomp' in.fasta | tail -n +2 > out.fasta", intern = TRUE))
    

    Note - intern = TRUE just captures the output as a character vector in R.