Составьте функцию из 2 аргументов в функцию N аргументов - PullRequest
0 голосов
/ 10 декабря 2018

Если у меня есть функция, подобная union, которая принимает объединение двух множеств, есть ли краткий способ написать функцию, которая принимает объединение произвольного числа наборов, то есть union_n(x, y, z, w) = union(x, union(y, union(z, w)))?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Альтернатива без рекурсии может быть такой:

U2 = function(...) { unique(c(...)) }

x = 1:3
y = 3:5
z = seq(2,8,2)

U2(x,y,z)
[1] 1 2 3 4 5 6 8
0 голосов
/ 10 декабря 2018

Попробуйте Reduce:

x <- 1:3
y <- 2:4
z <- 3:5
w <- 4:9
Reduce(union, list(x, y, z, w))
## [1] 1 2 3 4 5 6 7 8 9

или как функцию:

union_n <- function(...) Reduce(union, list(...))
union_n(x, y, z, w)
## [1] 1 2 3 4 5 6 7 8 9
0 голосов
/ 10 декабря 2018

Я в конечном итоге решил эту проблему с помощью рекурсии:

union_n <- function(x)
  if (length(x) == 1) x[[1]] else union(x[[1]], union_n(x[-1]))

Однако я открыт для более элегантных или вычислительно эффективных решений.

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