Giả sử I cần để lặp qua các hàng trong một khung dữ liệu vì một lý do nào đó.Lặp qua các hàng trong một khung dữ liệu
tôi tạo ra một data.frame đơn giản
df <- data.frame(id = sample(1e6, 1e7, replace = TRUE))
Dường như f2 đó là chậm hơn nhiều so với f1, trong khi tôi mong đợi họ là tương đương.
f1 <- function(v){
for (obs in 1:(1e6)){
a <- v[obs]
}
a
}
system.time(f1(df$id))
f2 <- function(){
for (obs in 1:(1e6)){
a <- df$id[obs]
}
a
}
system.time(f2())
Bạn có biết tại sao không? Họ có sử dụng chính xác cùng một lượng bộ nhớ không?
Với chức năng đầu tiên bạn sử dụng '$ 'một lần, trong hàm thứ hai bạn sử dụng nó 1e6 lần. '$' không phải là hàm subsetting nhanh nhất. – Roland
Điều làm tôi bất ngờ là 'f1' nhanh gấp hai lần' f3 <- hàm (v) cho (a in v) {NULL}; system.time (f3 (df $ id)) '. Ồ, tôi hiểu: '1e6' không phải là chiều dài của vectơ. 'system.time (f3 (df $ id [1: 1e6]))' là nhanh. – Frank