2010-08-27 12 views
8

con R, sólo quiero leer el contenido de un archivo en una variable como:R: ¿leer los contenidos del archivo de texto como una consulta?

query <- read_file_contents('biglongquery.sql') 

que se evite poner, así, grandes consultas largas en el guión R sí mismo. Hago no quiero leer en datos como CSV (por ejemplo, read.tables), etc.- solo el texto sin formato.

+0

pienso 'scan' puede hacer esto, pero No estoy seguro (así que no lo publico como una respuesta) – zwol

+1

¿Hay alguna razón por la cual no quieras hacerte una vista 'biglongquery'? Luego puede usar el paquete 'RODBC' para conectarse a su base de datos' SQL' y llamar 'select * from myShortView' o lo que sea apropiado. – Chase

+0

Estoy de acuerdo con Chase, las vistas se pueden leer igual que las tablas, creo que R ni siquiera distingue. –

Respuesta

10

El escaneo hace el trabajo, pero la función para este fin es realmente readLines().

query <- readLines("biglongquery.sql") 

Esto le da un vector con las líneas. Para combinarlos en una sola variable, puede usar la función pegar, p.

one.variable <- paste(query,collapse="\n") 
+2

Y si uno lo usa mucho entonces 'readQuery <-function (file) paste (readLines (file), collapse =" \ n ")' podría ser útil. – Marek

+0

Aparte de todo el trabajo de memoria en la primera división y recombinación de las líneas en el archivo, este método tiene la desventaja de que se perderá cualquier nueva línea final. Además, ha normalizado el terminador de línea a \ n. –

+0

@OliverBock Eso es correcto. Que yo sepa, no hay ninguna función que lea el contenido de un archivo completo y lo almacene como un solo valor. Y R generalmente funciona con \ n como terminador de línea, pero puede usar cualquiera que desee. –

2
x <- paste(scan("foo.sql",what="",sep="\n",blank.lines.skip=FALSE),collapse="\n") 
0

Otra forma es crear un script con .R definición de la consulta

# content of biglongquery.R 
query <- " 
SELECT 
    very_long_list_of_fields 
FROM ... 
" 

y luego usarlo en el script principal utilizando

source("biglongquery.R") 
Cuestiones relacionadas