У меня есть dataframe с набором объектов df$data и набором правил для применения к каждому объекту df$rules.
df <- data.frame(
  data = c(1,2,3),
  rules = c("rule1", "rule1, rule2, rule3", "rule3, rule2"),
  stringsAsFactors = FALSE
)
Правила
rule1 <- function(data) {
  data * 2
}
rule2 <- function(data) {
  data + 1
}
rule3 <- function(data) {
  data ^ 3
}
 Для каждой строки в ядре данных я хочу применить все правила, указанные в столбце rules. Правила должны применяться последовательно.
Что я понял:
apply_rules <- function(data, rules) {
  for (i in 1:length(data)) {
    rules_now <- unlist(strsplit(rules[i], ", "))
    for (j in 1:length(rules_now)) {
      data[i] <- apply_rule(data[i], rules_now[j])
    }
  }
  return(data)
}
apply_rule <- function(data, rule) {
  return(sapply(data, rule))
}
apply_rules(df$data, df$rules)
# [1]   2 125  28
 Хотя это работает, я уверен, что должны быть более элегантные решения. На SO я мог бы найти много материала о apply -functions, а также один посте о применении многих функций к вектору и что - то о цепочках функций. Идея Compose выглядит многообещающе, но я не мог понять, как сделать вызов Compose с моими правилами как строки. (parse() не работает..)
Любые намеки?
