JD méthode long est vraiment le premier qui est venu à l'esprit, mais une autre:
Filter(function(x) !(12345 %% x), 1:1000)
I t hink c'est amusant de ne pas avoir besoin d'une affectation explicite. (Un peu trop mauvais pour créer une nouvelle fonction à chaque fois.) (Dans ce cas, "!" Convertit une valeur non nulle en FAUX et zéro en VRAI. "Filtre" sélectionne chaque élément évaluant TRUE.)
évitant également la nécessité d'une allocation distincte et non la création d'une nouvelle fonction:
which(!(12345 %% 1:1000))
Durée:
> y <- 1:1000
> system.time(replicate(1e5, y[12345 %% y == 0 ]))
user system elapsed
8.486 0.058 8.589
> system.time(replicate(1e5, Filter(function(x) !(12345 %% x), y)))
Timing stopped at: 90.691 0.798 96.118 # I got impatient and killed it
# Even pulling the definition of the predicate outside,
# it's still too slow for me want to wait for it to finish.
# I'm surprised Filter is so slow.
> system.time(replicate(1e5, which(!12345 %% y)))
user system elapsed
11.618 0.095 11.792
Alors, ressemble à la méthode de JD long est le gagnant.
aussi, comment ferais-je la même chose dans vba? – user446667