Tôi có một Rscript đang đọc trong một dòng dữ liệu liên tục dưới dạng một tệp phẳng. Một tập lệnh khác chọn tệp phẳng này, thực hiện phân tích cú pháp và xử lý, sau đó lưu kết quả dưới dạng tệp data.frame ở định dạng RDS. Sau đó nó ngủ và lặp lại quá trình.Nối dữ liệu mới vào một khung dữ liệu hiện có (RDS) trong R
saveRDS(tmp.df, file="H:/Documents/tweet.df.rds") #saving the data.frame
Trong lần lặp thứ hai ... nth, tôi có mã chỉ xử lý dòng mới được thêm vào tệp phẳng kể từ lần lặp trước đó. Tuy nhiên, để nối thêm các đường delta vào khung dữ liệu cố định, tôi phải đọc nó trong, chắp thêm và sau đó lưu nó lại, ghi đè lên bản gốc.
df2 <- readRDS("H:/Documents/tweet.df.rds") #read in permanent
tmp.df2 <- rbind(df2, tmp.df) #append new to existing
saveRDS(tmp.df2, file="H:/Documents/tweet.df.rds") #save it
rm(df2) #housecleaning
rm(tmp.df2) #housecleaning
Cách tiếp cận này là mạo hiểm vì bất cứ khi nào RDS mở cửa cho việc đọc/ghi, một quá trình muốn chạm vào tập tin đó có phải chờ đợi. Khi tệp cơ sở trở nên lớn hơn, nguy cơ tăng lên.
Có gì giống như một appendRDS
(Tôi biết nghĩa là không) có thể đạt được những gì tôi muốn lặp lại cập nhật của một khung dữ liệu duy nhất- được lưu vào một tệp- sử dụng thay thế thay vì hoàn thành?
Vâng, tôi nghĩ bạn đang làm điều xấu ngay từ đầu. Bạn đang ghi đè lên dữ liệu trước đó của bạn, do đó có hiệu quả xóa các phiên bản trước đó. Điều đó nói rằng, tại sao không chỉ lưu dữ liệu của bạn dưới dạng văn bản (CSV, ví dụ) với 'write.table', cho phép phụ thêm vào tài liệu hiện có? –
Tôi thực sự ghi đè lên dữ liệu trước đó với một bản sao của dữ liệu trước đó rbind'd cho các hồ sơ mới nhất. Hy vọng rằng khối thứ hai của tôi cho thấy rằng quá trình đọc trong cũ, nối mới, ghi đè cũ với cũ + mới. Bây giờ tôi thấy tùy chọn chắp thêm write.table. Tôi đã tránh xa một định dạng không phải bản địa bởi vì tôi nghĩ rằng nó sẽ làm tăng chi phí xử lý. Nhưng tôi có thể ổn với việc giao dịch một chút không hiệu quả trong bước đó để ổn định hơn. –
Tôi tự hỏi nếu một số phép thuật với serialize có thể được sử dụng để tạo ra một chức năng phụ thêm. –