Рассмотрим эту функцию игрушку, которая принимает 3 аргумента:mapply для комбинаций всех аргументов [R]
toy <- function(x, y, z){
paste(x, y, z)
}
Для каждого аргумента у меня есть несколько значений (не обязательно один и тот же номер для каждого аргумента), и я хочу применить функцию toy
к различным комбинациям этих аргументов.
Итак, я подумал, хорошо, давайте использовать многомерную версию применяемых функций mapply
.
mapply(FUN = toy, x = 1:2, y = c("#", "$"), z = c("a", "b"))
[1] "1 # a" "2 $ b"
Но это не совсем то, что я хотел. Действительно, согласно справке mapply
"применяется FUN к первым элементам каждого ... аргумента, второму элементу, третьим элементам и т. Д.". И я хочу применить FUN ко всем различным комбинациям всех аргументов.
Таким образом, вместо
[1] "1 # a" "2 $ b"
В результате я хотел бы скорее:
[1] "1 # a" "1 # b" "1 $ a" "1 $ b" "2 # a" "2 # b" "2 $ a" "2 $ b"
Итак, мой вопрос, что это умный способ сделать это?
Конечно, я могу заранее подготовить комбинации и упорядочить аргументы для mapply
, чтобы они включали в себя - все комбинации. Но я просто подумал, что это может быть довольно распространенной задачей, и в рамках семейства приложений может быть уже функция, которая может это сделать.
Вы можете сделать 'do.call (вставить, expand.grid (x = 1: 2, y = c (" # "," $ "), z = c (" a "," b ")))) 'возможно –