2010-06-15 53 views
37

tôi có trong R một danh sách như thế này:R: In danh sách vào một tập tin văn bản

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

[[2]] 
[1] 1693237 13462 

Mỗi phần tử của danh sách có số lượng khác nhau của các yếu tố của nó.

Tôi muốn in danh sách này vào một tập tin văn bản như thế này:

mylist.txt 
234984 10354 41175 932711 426928 
1693237 13462 

tôi biết rằng tôi có thể sử dụng bồn rửa(), nhưng nó sẽ in tên của các nguyên tố [[x]], [y] và tôi muốn tránh nó. Cũng vì số lượng phần tử khác nhau trong mỗi phần tử của danh sách, không thể sử dụng write() hoặc write.table().

Trả lời

46

Không thử nghiệm, nhưng nó nên làm việc (sửa sau khi bình luận)

lapply(mylist, write, "test.txt", append=TRUE, ncolumns=1000) 
+4

Tested. Công việc. Bạn cũng có thể sử dụng viết tắt: 'lapply (mylist, write," test2.txt ", append = TRUE)' – Marek

+1

@Marek: Tốt! Tôi không nhớ bạn có thể chuyển các tham số đến một cách lúng túng như thế! – nico

+4

Chỉ cần một chi tiết quan trọng, bạn cần phải xác định tham số ncolumns của chức năng ghi, nếu không dòng sẽ được cắt thành 5 cột chỉ: 'lapply (mylist, write," test3.txt ", append = T, ncolumns = 1000)' – pms

11

Một cách khác

writeLines(unlist(lapply(mylist, paste, collapse=" "))) 
3

tùy thuộc vào thị hiếu của bạn, một thay thế cho câu trả lời nico của:

d<-lapply(mylist, write, file=" ... ", append=T); 
1

Đây là một số khác

cat(sapply(mylist, toString), file, sep="\n") 
+0

Cảm ơn bạn. Điều này làm việc cho tôi. Với các giải pháp khác, tôi nhận được một lỗi "... không thể được xử lý bởi 'mèo'? Tôi có thể hỏi bạn những gì sẽ là giải pháp nếu tôi có trong danh sách hai khung dữ liệu và tôi muốn xuất chủ đề vào txt và giữ cấu trúc của các bảng? Giữa họ tôi muốn có một hàng trống. – Eco06

5

Dưới đây là một cách khác để sử dụng bồn rửa:

chìm (sink_dir_and_file_name); in (yourList); sink()

14

Tôi thấy trong phần bình luận cho câu trả lời của Nico rằng một số người đang gặp sự cố với việc lưu danh sách có danh sách bên trong. Tôi cũng gặp phải vấn đề này với một số công việc của tôi và hy vọng rằng ai đó tìm thấy câu trả lời tốt hơn những gì tôi tìm thấy tuy nhiên không ai trả lời vấn đề của họ.

Vì vậy: @ali, @FMKerckhof và @Kerry cách duy nhất tôi tìm thấy để lưu danh sách lồng nhau là sử dụng sink() như user6585653 đề xuất (Tôi đã cố gắng bỏ phiếu cho câu trả lời của mình nhưng không thể). Nó không phải là cách tốt nhất để làm điều đó kể từ khi bạn liên kết các tập tin văn bản có nghĩa là nó có thể dễ dàng hơn bằng văn bản hoặc kết quả khác có thể được lưu trong tập tin đó nếu bạn không hủy bỏ bồn rửa. Xem bên dưới để biết mã.

sink("mylist.txt") 
print(mylist) 
sink() 

Đảm bảo có dấu sink() ở cuối mã của bạn để bạn hủy bồn rửa.

+0

giải pháp tuyệt vời! những người khác đã cho tôi một lỗi này hoạt động hoàn hảo cho danh sách lồng nhau của tôi. – agenis

0

Tôi giải quyết vấn đề này bằng cách trộn các giải pháp trên.

sink("/Users/my/myTest.dat") 
writeLines(unlist(lapply(k, paste, collapse=" "))) 
sink() 

Tôi nghĩ rằng nó hoạt động tốt

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