2011-01-30 36 views
15

Tôi có một tập tin như thế này:Đọc một tập tin văn bản với số lượng biến của cột vào một danh sách

mylist.txt 
234984 10354 41175 932711 426928 
1693237 13462 

Mỗi dòng của tập tin này có số lượng khác nhau của các yếu tố, tối thiểu là 1 phần tử trên mỗi dòng. Tôi muốn đọc nó vào một danh sách như thế này:

> print(head(mylist,2)) 
[[1]] 
[1] 234984 10354 41175 932711 426928 

[[2]] 
[1] 1693237 13462 
+0

Kể từ các mục danh sách ví dụ của bạn hiển thị các khoảng trống được giữ nguyên giữa các số, nó không rõ ràng nếu bạn muốn mỗi dòng là một chuỗi dài hoặc một vectơ số. –

+0

Vector số. Tôi không chắc tại sao nó thể hiện không gian. Dù sao, câu trả lời aL3xa dường như hoạt động khá tốt. – pms

Trả lời

19

Giả sử không gian đó là delimiter:

fc <- file("mylist.txt") 
mylist <- strsplit(readLines(fc), " ") 
close(fc) 

EDIT:

Nếu các giá trị được giới hạn bởi nhiều không gian (một/hoặc theo cách unconsistent), bạn có thể phù hợp với delimiter với biểu thức chính quy:

mylist.txt 
234984 10354 41175 932711  426928 
1693237    13462 

fc <- file("mylist.txt") 
mylist <- strsplit(readLines(fc), " +") 
close(fc) 

EDIT # 2

Và kể từ strsplit lợi nhuận chuỗi, bạn cần phải chuyển đổi dữ liệu sang dạng số (đó là một điều dễ dàng):

mylist <- lapply(mylist, as.numeric) 
2

Một câu trả lời có thể là lần đầu tiên đọc một danh sách đầy bằng NA và sau đó loại bỏ chúng như thế này:

l<-as.list(as.data.frame(t(read.table("mylist.txt",fill=TRUE,col.names=1:max(count.fields("mylist.txt")))))) 
l<-lapply(l, function(x) x[!is.na(x)]) 

Tôi tự hỏi nếu có là cách làm đơn giản hơn.

1

Bạn có thể đơn giản hóa dòng thứ hai bằng cách sử dụng lapply thay vì sapply

lapply(l, function(x)x[!is.na(x)]) 
+0

1. Bạn cần nó, nếu không read.table sẽ lấy số cột để đọc số cột tối đa trong 5 dòng đầu tiên của tệp – pms

+0

@pms Ahh, tệp thử nghiệm của tôi có số cột tối đa trong dòng đầu tiên. Tôi đã cập nhật câu trả lời của mình. – csgillespie

+0

2. Bạn đúng, tôi đã chỉnh sửa nó, cảm ơn bạn đã nhận xét của bạn. – pms

Các vấn đề liên quan