2012-07-09 35 views
13

Así que tengo este programa samtools que quiero usar desde la línea de cmd, convirtiendo un archivo en otro. Funciona así:Ejecutar un script bash desde un script R

bash-4.2$ samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta 

Como yo quiero para automatizar esto, me gustaría automatizar mediante el uso de una secuencia de comandos R. Sé que puede utilizar el sistema() para ejecutar un comando del sistema operativo, pero no puedo conseguir que funcione al tratar

system(samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta) 

¿Es sólo una cuestión de usar expresiones regulares para deshacerse de los espacios y cosas así que la coma nd argumento sistema (comando) es legible? ¿Cómo hago esto?

EDIT:

system("samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > first_batch_1.fasta") Error: unexpected input in "system("samtools view filename.bam | awk '{OFS="\"

Edit2:

system("samtools view filename.bam | awk '{OFS=\"\t\"; print \">\"$1\"\n\"$10}' - > filename.fasta")

awk: cmd. line:1: {OFS=" "; print ">"$1" 
awk: cmd. line:1:      ^unterminated string 
awk: cmd. line:1: {OFS=" "; print ">"$1" 
awk: cmd. line:1:      ^syntax error 
> 

Edit3: Y el ganador es:

system("samtools view filename.bam | awk '{OFS=\"\\t\"; print \">\"$1\"\\n\"$10}' -> filename.fasta") 
+1

'sistema()' toma una cadena de caracteres como argumento, por lo que Necesito envolver tu argumento entre comillas. – Andrie

+0

Ya lo había intentado. Se muestra como editar arriba. – cianius

+1

try system ("samtools view filename.bam | awk '{OFS = \" \ t \ "; print \"> \ "$ 1 \" \ n \ "$ 10}' -> filename.fasta") Necesitas escapar las comillas dobles, para que R lea todo el comando, en lugar de solo la parte del comando entre las dos primeras comillas dobles –

Respuesta

22

La forma de depurar esto es utilizar cat a prueba si su cadena de caracteres se ha escapado correctamente. Por lo tanto:

  1. crear un objeto x con su cadena de
  2. cuidadosamente escapar todos los caracteres especiales, en este caso las cotizaciones y las barras invertidas
  3. Use cat(x) para inspeccionar la cadena resultante.

Por ejemplo:

x <- 'samtools view filename.bam | awk \'{OFS="\\t"; print ">"$1"\\n"$10}\' - > filename.fasta' 

cat(x) 
samtools view filename.bam | awk '{OFS="\t"; print ">"$1"\n"$10}' - > filename.fasta 

Si esto da la cadena correcta, entonces usted debería ser capaz de utilizar

system(x) 
+0

Sí, necesito aprender a depurar esto por mi cuenta. Gracias Andrie! – cianius

+1

@Andrie tengo un script bash seguro en la carpeta '" c:/test "' con el nombre'test.sh'. Quiero llamar a este script bash en el código r. Intento este comando del 'system' pero obteniendo un error estimado ¿me ayudarás? –

Cuestiones relacionadas