Göreceli olarak çalıştırmam gereken temel bir görevin performansını artırmaya çalışıyorum. Bir dataframe şöyle 'test' var:Döngüyü değiştirin Veri çerçevesine uygula
pair_id rr im db
1 A0A0B5JQ66_A0A0B5JFG2 NA yes NA
2 A0A024RA76_A0A024RA76 NA yes NA
3 A0A068F1B9_A0A068F1B9 NA yes NA
4 A0A098_A0A098 NA yes NA
5 A0A0B5JJY8_A0A0B5JFB4 yes NA NA
6 A0A0B5JK11_A0A0B5JK11 yes NA NA
7 A0A0B5JK74_A0A0B5JFG2 yes NA NA
8 A0A0B5JK74_A0A0B5JK74 yes NA NA
9 A0A0B5JKA2_A0A0B5JF96 NA yes NA
10 A0A0B5JKA2_A0A0B5JK74 NA yes NA
11 A0A0B5JPZ7_A0A0B5JFG2 yes yes NA
12 A0A0B5JPZ7_A0A0B5JK74 NA yes NA
13 A0A0B5JPZ7_A0A0B5JKA2 NA yes NA
14 A0A0B5JPZ7_A0A0B5JPZ7 NA yes NA
15 A0A0B5JQ10_A0A0B5JK95 yes yes NA
16 A0A0B5JQ14_A0A0B5JFB4 NA yes NA
17 A0A0B5JQ25_A0A0B5JFB4 NA yes NA
18 A0A0B5JQ25_A0A0B5JFB8 NA yes NA
19 A0A0B5JQ25_A0A0B5JK29 NA yes NA
20 A0A0B5JQ29_A0A0B5JQ14 yes NA NA
Ben sütunları 2 ve 3 ('rr' ve 'im') karşılaştırmak gerekir ve daha sonra bu karşılaştırmaya dayanılarak sütun numarası 4 için bir değer ayarlayın. Sadece girdi olarak iki unsurdan bir vektör alır
compare <- function(v){
if (v[1]=="yes" & is.na(v[2])){
db <- "rr"
}
else if (v[2]=="yes" & is.na(v[1])){
db <- "im"
}
else if (v[1]=="yes" & v[2]=="yes"){
db <- "both"
}
else {
db <- "check"
}
db
}
, çekler bir "evet" bir değere sahiptir ve hangisinin boş olduğunu (varsa): Bunun için ben 'karşılaştırmak' denilen şu fonksiyonu oluşturduk ve üçüncü bir sütuna atanabilecek bir değer döndürür. Şimdi
kullanıyorum 'test' bu kullanıyoruz bir for döngüsü:
for (i in 1:nrow(test)){
test[i,]$db <- compare(test[i,2:3])
}
benim veri çerçeveleri büyük olmak olsun, bu çözüm (I 700000 üzerinde bazı yönetmek zorunda ancak çok verimsiz satırlar) ve hesaplamak için çok zaman alır. Fonksiyonumu 'başvuru' ailesinin farklı varyantları altında kullanmaya çalışıyorum, ancak çalışamayacağımı, çünkü R'ye yeni olduğum için ve bu işlevler kümesinde çok fazla tecrübem yok. Preformansı artıracak bir alternatif hakkında ipuçları var mı?