суммирование значений на основе элементов в числовом именованном списке в r

#r

#r

Вопрос:

Предполагая, что у меня есть следующий упрощенный именованный список

 tbl1 <- c(a=5,b=3,c=6) 
  

и второй список символов

 lst2 <- c("abbacb","aacb")
  

Как я могу вычислить сумму для каждой строки в lst2 на основе значений в tbl1 ?

Чтобы быть более точным, «abbacb» должен давать 5 3 3 5 6 3=25 в то время как «aacb» = 19.

Ответ №1:

Вот вариант с strsplit вводом list символов. Затем используйте именованный вектор для замены значений путем сопоставления с names из ‘tbl1’ и получите sum из замененных значений

 sapply(strsplit(lst2, ""), function(x) sum(tbl1[x]))
#[1] 25 19
  

Или другой вариант — заменить внутри строки без разделения, а затем выполнить eval uation

 library(stringr)
sapply(str_replace_all(str_replace_all(lst2, "(?<=.)(?=.)", " "), 
  setNames(as.character(tbl1), names(tbl1))), 
       function(x) eval(parse(text = x)))
 #5 3 3 5 6 3     5 5 6 3 
 #      25          19