Предположим, что по какой-то причине I необходимо.Цитирование по строкам в информационном кадре
Я создаю простой data.frame
df <- data.frame(id = sample(1e6, 1e7, replace = TRUE))
кажется, что f2 гораздо медленнее, чем f1, в то время как я ожидал, что они эквивалентны.
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())
Вы знаете, почему? Используют ли они точно такой же объем памяти?
С первой функции вы используете '$' один раз, во второй функции вы используете его 1e6 раз. '$' не самая быстрая функция подмножества. – Roland
Меня удивляет то, что 'f1' в два раза быстрее, чем' f3 <- function (v) для (a в v) {NULL}; system.time (f3 (ДФ $ ID)) '. О, я вижу: '1e6' - это не полная длина вектора. 'system.time (f3 (df $ id [1: 1e6]))' быстро. – Frank