- Phát triển data.frame theo cách hiệu quả về bộ nhớ
- phát hiện rò rỉ bộ nhớ ruby/ruby on rails
- Không thể giải quyết việc nhập android.support.v7.app
- Ổ cắm miền UNIX và bộ nhớ chia sẻ (tệp được ánh xạ)
theoTạo một khung dữ liệu R theo từng hàng ,sử dụng liên kết
Đính kèm vào dữ liệu.khung
Không lý tưởng vì nó tạo ra một bản sao của toàn bộ data.frame mỗi lần. Làm cách nào để R
Tích lũy dữ liệu trong dữ liệu.khung
Mà không phải chịu hình phạt này? Định dạng trung gian không cần phải là dữ liệu.khung
.
1 Câu trả lời
Phương pháp đầu tiên
Tôi thử truy cập từng phần tử của data.frame được phân bổ trước:
res <- data.frame(x=rep(NA,1000), y=rep(NA,1000))
tracemem(res)
đối với (tôi trong 1:1000) {
res[i,"x"] <- runif(1)
res[i,"y"] <- rnorm(1)
}
Nhưng tracemem hoạt động không bình thường (ví dụ: data.frame được sao chép đến một địa chỉ mới mỗi lần).
Phương pháp thay thế (cũng không hiệu quả)
Một cách (không chắc là có nhanh hơn không vì tôi chưa đánh giá chuẩn) là tạo danh sách data.frames rồi đặt chúng vàochồng chất
Cùng nhau:
makeRow <- hàm() dữ liệu.frame(x=runif(1),y=rnorm(1))
res <- replicate(1000, makeRow(), simply=FALSE ) # trả về danh sách các data.frames
thư viện(taRifx)
res.df <- ngăn xếp(res)
Thật không may, tôi nghĩ bạn sẽ gặp khó khăn trong việc phân bổ trước khi tạo danh sách. Ví dụ:
> tracemem(res)
[1] "<0x79b98b0>"
> res[[2]] <- dữ liệu.khung()
tracemem[0x79b98b0 -> 0x71da500]:
Nói cách khác, việc thay thế một phần tử trong danh sách sẽ khiến danh sách đó được sao chép. Tôi cho là toàn bộ danh sách, nhưng cũng có thể chỉ là phần tử đó trong danh sách. Tôi không rành lắm về cách quản lý bộ nhớ của R.
Có lẽ là cách tốt nhất
Cũng như nhiều quy trình bị hạn chế về tốc độ hoặc bộ nhớ hiện nay, cách tiếp cận tốt nhất có lẽ là sử dụng dữ liệu.bảng
Còn hơn là dữ liệu.khung
. bởi vì dữ liệu.bảng
có :=
Toán tử gán, có thể cập nhật mà không cần sao chép lại:
thư viện(dữ liệu.bảng)
dt <- bảng dữ liệu(x=rep(0,1000), y=rep(0,1000))
tracemem(dt)
đối với (tôi trong 1:1000) {
dt[i,x := runif(1)]
dt[i,y := rnorm(1)]
}
# lưu ý không có tin nhắn từ tracemem
Nhưng như @MatthewDowle đã chỉ ra,bộ()
là cách thích hợp để thực hiện điều này trong một vòng lặp. Sẽ nhanh hơn nếu làm thế này:
thư viện(dữ liệu.bảng)
n <- 10^6
dt <- bảng dữ liệu(x=rep(0,n), y=rep(0,n))
dt.colon <- hàm(dt) {
đối với (i trong 1:n) {
dt[i,x := runif(1)]
dt[i,y := rnorm(1)]
}
}
dt.set <- hàm(dt) {
đối với (i trong 1:n) {
đặt(dt,i,1L, runif(1) )
đặt(dt,i,2L, rnorm(1) )
}
}
thư viện (microbenchmark)
m <- microbenchmark(dt.colon(dt), dt.set(dt),times=2)
(Kết quả như sau)
Tiêu chuẩn
Chạy vòng lặp 10.000 lần, bảng dữ liệu sẽ nhanh hơn gần một cấp độ:
Đơn vị: giây
biểu thức min lq trung vị uq max
1 kiểm tra.df() 523.49057 523.49057 524.52408 525.55759 525.55759
2 kiểm tra.dt() 62.06398 62.06398 62.98622 63.90845 63.90845
3 kiểm tra. stack() 1196.30135 1196.30135 1258.79879 1321.29622 1321.29622
:=
Và bộ()
So sánh:
> nam
Đơn vị: mili giây
biểu thức min lq trung vị uq max
1 dt. dấu hai chấm(dt) 654.54996 654.54996 656.43429 658.3186 658.3186
2 dt.set(dt) 13.29612 13.29612 15.02891 16.7617 16.7617
Xin lưu ý rằng ở đây N
Giá trị này là 10^6 thay vì 10^5, như thể hiện trong biểu đồ chuẩn ở trên. Do đó, khối lượng công việc tăng lên theo cấp số nhân và kết quả được đo bằng mili giây thay vì giây. Thực sự rất ấn tượng.
Liên quan đến r - phát triển data.frame theo cách hiệu quả về bộ nhớ, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11486369/
Chỉ muốn biết sự khác biệt giữa các cấu trúc này (text, data, rodata, bss, v.v.) là gì. Trong tập lệnh liên kết: .data : { *(.data) } .data : { *(.data*) }
Dữ liệu được định nghĩa là một trong những hàm cốt lõi của nó gfoldl : gfoldl :: (Dữ liệu a) => (cho tất cả d b. Dữ liệu d => c (d -> b) -> d -> cb)
Sự khác biệt giữa: data-sly-use, data-sly-resource, data-sly-include và data-sly-template là gì? Tôi đang đọc tài liệu về Sightly AEM và tôi rất bối rối.
Tôi có một ứng dụng web Spring Boot, Spring Data JPA (hibernate) và muốn giới thiệu chức năng tìm kiếm văn bản. Tôi hiểu tìm kiếm hibernate hoặc spring sau đây
Tôi không biết mã của tôi có vấn đề gì. Tôi đã đọc một số câu hỏi của những người khác cũng gặp vấn đề tương tự nhưng không tìm được câu trả lời. Khi tôi cố gắng biên dịch, tôi nhận được lỗi sau: ||Trong hàm 'main':| |35|lỗi: mong đợi ex
Tôi không thực sự chắc chắn tại sao tôi lại gặp lỗi này hoặc nó có nghĩa là gì. Khung dữ liệu của tôi được gọi là 'dữ liệu'. thư viện(dplyr) dữ liệu %>% bộ lọc(Thông tin==1, Nam==1) %>% lm(CFL_
Tôi luôn thấy những thuộc tính này trên các trang web hiện đại hơn như GitHub và chúng dường như luôn trùng khớp với các cửa sổ bật lên tùy chỉnh như thuộc tính tiêu đề. Tùy chọn 1 Tùy chọn 2 Tùy chọn 3 Tùy chọn 4 Tôi đang ở trong HTML
Làm thế nào để thay thế Dữ liệu lõi hiện tại của tôi bằng Dữ liệu lõi iCloud? Đây là điều phối viên lưu trữ liên tục của tôi: lazy var persistentStoreCoordinator: NSPersistent
Tôi luôn thấy những thuộc tính này trên các trang web hiện đại hơn như GitHub và chúng dường như luôn trùng khớp với các cửa sổ bật lên tùy chỉnh như thuộc tính tiêu đề. Tùy chọn 1 Tùy chọn 2 Tùy chọn 3 Tùy chọn 4 Tôi đang ở trong HTML
Tôi đang mày mò với node.js trên Android thông qua dự án này và tôi cần một cách để triển khai các tệp js vào một thư mục riêng tư (để ẩn mã nguồn khỏi sự can thiệp của người dùng) cũng tồn tại vật lý trên hệ thống tệp.
Xin chào mọi người, tôi hơi bực mình nên mong nhận được sự giúp đỡ. Dự án của tôi sử dụng SwiftUI. Tôi muốn lưu hình ảnh vào Core Data bằng cách sử dụng trình chọn hình ảnh. Tôi đã thực hiện được việc sử dụng ImagePicker nhưng tôi đang gặp khó khăn trong việc chuyển đổi hình ảnh -
Tôi có dữ liệu và mã sau: mydf grp categ condition value 1 AXP 2 2 BXP 5
Tôi đã vật lộn với vấn đề này một thời gian nhưng vẫn không thể tìm ra giải pháp nào cho vấn đề của mình. Hy vọng có ai đó ở đây có thể giúp được. Tôi đang cố gắng tạo một ma trận lựa chọn cá nhân cho một số dữ liệu có cấu trúc sau: # A tibble: 2,152 x 32 a
Tôi hiểu rằng Data.Map.Lazy và Data.Map.Strict là khác nhau. Nhưng khi bạn nhập Data.Map
Tôi đang phát triển một chương trình C để trích xuất các bản ghi từ cơ sở dữ liệu BerkeleyDB DBTree có giá trị dữ liệu khớp với một mẫu nhất định. Tôi tạo cơ sở dữ liệu, mở nó, xóa DBT cho các khóa và một DBT khác cho dữ liệu, đặt cờ DBT thành
Vì vậy, tôi có bảng lịch sử thành viên sau User_ID | Ngày bắt đầu | Ngày kết thúc | Loại (0-7) | ------------------------------
Với sự ra mắt gần đây của gói khung dữ liệu, tôi nghĩ đã đến lúc phải đánh giá chuẩn xác các cấu trúc dữ liệu khác nhau và làm nổi bật điểm mạnh của từng cấu trúc. Tôi không phải là chuyên gia về điểm mạnh của từng loại, vì vậy câu hỏi của tôi là, chúng ta nên đánh giá chúng như thế nào. Những gì tôi đã thử
Tôi có dữ liệu từ API nhưng tôi không thể đặt dữ liệu trong mảng thành this.data trong vue.js Đây là dữ liệu từ API (JSON) Bạn có thể cho tôi biết cú pháp cho {"id":1613, "name_org":" này không
Trong Vue.js cho đến nay, tôi đã tìm thấy hai cách để xác định dữ liệu: data: {} và data() { return; }. data: { defaultLayout: 'default' }
Tôi đang làm việc trên Spring Data Rest Services và gặp một số vấn đề với các trình chặn tùy chỉnh. Trước đó tôi đã sử dụng spring-data-rest-webmvc 2.2.0 và thêm interceptor theo cách sau. công cộng
Tôi là một lập trình viên xuất sắc, rất giỏi!