Innym Posibility:
myvec <- c("A", "KILLS", "PASS", "JUMP", "BANANA", "AALU", "KPAL")
sapply(gregexpr("A", myvec, fixed = TRUE), function(x) sum(x > -1))
## [1] 1 0 1 0 3 2 1
EDIT ten prosząc o wartość odniesienia:
library(stringr); library(stringi); library(microbenchmark); library(qdapDictionaries)
myvec <- toupper(GradyAugmented)
GREGEXPR <- function() sapply(gregexpr("A", myvec, fixed = TRUE), function(x) sum(x > -1))
GSUB <- function() nchar(gsub("[^A]", "", myvec))
STRSPLIT <- function() sapply(strsplit(myvec,""), function(x) sum(x=='A'))
STRINGR <- function() str_count(myvec, "A")
STRINGI <- function() stri_count(myvec, fixed="A")
VAPPLY_STRSPLIT <- function() vapply(strsplit(myvec,""), function(x) sum(x=='A'), integer(1))
(op <- microbenchmark(
GREGEXPR(),
GSUB(),
STRINGI(),
STRINGR(),
STRSPLIT(),
VAPPLY_STRSPLIT(),
times=50L))
## Unit: milliseconds
## expr min lq mean median uq max neval
## GREGEXPR() 477.278895 631.009023 688.845407 705.878827 745.73596 906.83006 50
## GSUB() 197.127403 202.313022 209.485179 205.538073 208.90271 270.19368 50
## STRINGI() 7.854174 8.354631 8.944488 8.663362 9.32927 11.19397 50
## STRINGR() 618.161777 679.103777 797.905086 787.554886 906.48192 1115.59032 50
## STRSPLIT() 244.721701 273.979330 331.281478 294.944321 348.07895 516.47833 50
## VAPPLY_STRSPLIT() 184.042451 206.049820 253.430502 219.107882 251.80117 595.02417 50
boxplot(op)
I stringi koklusz kilka głównych ogon. The vapply
+ strsplit
było miłym podejściem, podobnie jak proste podejście gsub
. Interesujące wyniki na pewno.

+1 za miłą benchmarku. – akrun
@SHRram proszę nie przyznawać mi czeku. Dostarczyłem benchmarki głównie dlatego, że już je uruchomiłem dla własnej rozrywki. Jak widać moja odpowiedź jest blisko dna. Naprawdę chciałbym zasugerować przyznanie czeku na odpowiedź, której użyłeś. –