2010-08-27 35 views
8

Sử dụng R, tôi chỉ muốn đọc nội dung của một tập tin vào một biến như:R: đọc nội dung của tệp văn bản dưới dạng truy vấn?

query <- read_file_contents('biglongquery.sql') 

Như để tránh đặt, tốt, các truy vấn dài lớn trong kịch bản R riêng của mình. Tôi làm không phải muốn đọc dữ liệu như CSV (ví dụ: read.tables), v.v ... chỉ là văn bản thô.

+0

Tôi nghĩ 'scan' thể làm điều này nhưng Tôi không chắc chắn (do đó, không đăng nó như là một câu trả lời) – zwol

+1

Có lý do nào khiến bạn không muốn thực hiện một cái nhìn của bạn 'biglongquery'? Sau đó bạn có thể sử dụng gói 'RODBC' để kết nối với cơ sở dữ liệu' SQL' của bạn và gọi 'select * từ myShortView' hoặc bất cứ điều gì là thích hợp. – Chase

+0

Tôi đồng ý với Chase, lượt xem có thể được đọc giống như bảng, tôi nghĩ R thậm chí không phân biệt. –

Trả lời

10

Quét thực hiện công việc nhưng chức năng cho mục đích này thực sự là readLines().

query <- readLines("biglongquery.sql") 

Điều này cung cấp cho bạn vectơ có đường kẻ. Để kết hợp chúng với một biến duy nhất, bạn có thể sử dụng chức năng dán, ví dụ:

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

Và nếu một trong những sử dụng nó rất nhiều sau đó 'readQuery <-function (file) dán (readLines (file), collapse =" \ n ")' có thể hữu ích. – Marek

+0

Khác với tất cả các bộ nhớ làm việc trên đầu tiên tách và tái kết hợp các dòng trong tập tin, phương pháp này có bất lợi mà bất kỳ dấu mới sẽ bị mất. Ngoài ra, bạn đã chuẩn hóa trình kết thúc dòng thành \ n. –

+0

@OliverBock Đúng vậy. Theo hiểu biết của tôi, không có hàm nào đọc nội dung của toàn bộ tệp và lưu trữ nó dưới dạng một giá trị duy nhất. Và R thường làm việc với \ n như trình kết thúc dòng, nhưng bạn có thể sử dụng bất kỳ thứ gì bạn muốn. –

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

Một cách khác là tạo ra một kịch bản .R với định nghĩa truy vấn

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

và sau đó sử dụng nó trong kịch bản chính sử dụng

source("biglongquery.R") 
Các vấn đề liên quan