Многофункциональные входы от одного объекта в R? - PullRequest
1 голос
/ 15 марта 2019

Я хотел бы использовать один объект для передачи нескольких входов функции в R, возможно ли это?MWE:

df <- data.frame(yes = c(10,20), no = c(50,60),maybe = c(100,200))

fxn <- function(x,y,z){
  a = x + y
  b = x + z
  c = y + z
  return(list(a=a,b=b,c=c))
}

foo <- c("rincon","malibu","steamer")
bar <- c("no","maybe")

df[foo] <- fxn(df$yes,df[bar])

В реальной задаче у моей функции больше входов, для которых по умолчанию установлено значение NULL.Я работаю в динамическом блестящем контексте, поэтому значение и длина bar меняется.Любая помощь для этого новичка будет принята с благодарностью.

1 Ответ

3 голосов
/ 15 марта 2019

С помощью базы R вы можете построить вызов, используя do.call и создать list() параметров, которые вы хотите передать в функцию

do.call("fxn", c(list(df$yes), unname(df[bar])))

Это будет то же самое, что и

fxn(df$yes, df[bar][[1]], df[bar][[2]])

Нам нужно использовать unname(), потому что в противном случае ваши параметры будут называться «нет» и «возможно», в то время как ваша функция ожидает «у» и «z».

rlangпакет, вы можете сделать

library(rlang)
eval_tidy(quo(fxn(df$yes, !!!unname(df[bar]))))

, который использует оператор сплайсинга !!!, как некоторые другие языки.Base R не имеет такого синтаксиса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...