2013-11-23 13 views
6

Tôi đang sử dụng readLines (url văn bản) trong một tập lệnh, trong đó readLines (url văn bản) được gọi là vài trăm lần, trong đó mỗi url văn bản là duy nhất.Làm thế nào để tôi đóng một kết nối đúng cách trong R, vì vậy kết nối 'khe' của nó được phát hành?

Sau khoảng 125 cuộc gọi đến readLines (url văn bản) Tôi gặp lỗi "tất cả các kết nối đang được sử dụng".

Khi tôi kiểm tra kết nối mở của tôi với showConnections (tất cả = TRUE), cho các kết nối url tôi thấy:

description  class ... isopen 
"www.site.com" "url" ... "closed" ... 

Làm thế nào để loại bỏ những kết nối này đóng cửa từ môi trường R vì vậy tôi có thể mở các kết nối mới?

Ngoài ra, tôi đã thử mở các url trước khi bàn tay, chuyển kết nối url vào readLines, sau đó đóng kết nối sau khi tôi hoàn tất kết nối và vẫn gặp sự cố tương tự.

+4

Nếu bạn đã gõ '? ShowConnections' bạn sẽ tìm thấy những chức năng 'closeAllConnections'. cái đó có giúp ích không? –

+0

Tôi vừa thử closeAllConnections và nó đã gặp trình thông dịch r của tôi. Nói chung, tôi không nghĩ rằng nó là một giải pháp khả thi vì tôi cần phải giữ một vài kết nối không phải mở url. – user220419

+0

Bạn đã thử 'close' chưa? – Thomas

Trả lời

5

Cách dễ nhất để tránh các vấn đề như thế này là đóng kết nối một cách rõ ràng khi bạn đã hoàn tất kết nối. Trong R, cách dễ nhất để làm điều đó là sử dụng on.exit() đó sẽ đảm bảo các url được đóng lại ngay cả khi một lỗi xảy ra trong mã của bạn

read_url <- function(url, ...) { 
    on.exit(close(url)) 
    readLines(url, ...) 
} 
showConnections() 
g <- read_url("http://www.google.com") 
showConnections() 
Các vấn đề liên quan