R'de çoklu mantıksal karşılaştırma gerçekleştirmenin en hızlı yolu nedir?R'de çoklu mantıksal karşılaştırma yapmanın en hızlı yolu nedir?
vektör x
set.seed(14)
x = sample(LETTERS[1:4], size=10, replace=TRUE)
Ben x
her girişin "A" veya "B" ya olup olmadığını test etmek istiyorum (başka değil bir şey) örneğin düşünün. Aşağıdaki kodlar, tüm vektörün uzunluğu boyunca üç kez döngüler açar. R'de sadece bir kez dönmenin bir yolu var mı ve her bir maddeyi bir ya da bir başka koşulu yerine getirip getirmediğini test edin? Böyle küçük İçin
#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::LogicalVector single_pass(Rcpp::CharacterVector x, Rcpp::String a, Rcpp::String b) {
R_xlen_t i = 0, n = x.size();
Rcpp::LogicalVector result(n);
for (; i < n; i++) {
result[i] = (x[i] == a || x[i] == b);
}
return result;
}
: Hedefiniz tek bir geçiş yapmak için sadece ise
ne hakkında: '% c,% c (" A "," B ") – MrFlick
@MrFlick Bu iki seçeneği zamanlama ile oynuyordum ve gerçekten bir fark görmüyorum. Ölçek her şeyden daha büyükken bile nanosaniyedir. Bu yüzden biraz kaybettim. – joran
@joran Evet, büyük bir hız artışı görmüyorsun (ve bunun nerede olduğuna şüphe duyarım) performans darboğazıdır) ama sadece bir sözdizimi alternatifi. – MrFlick