Как сделать отдельные множества из объектов в `...` в функции R - PullRequest
1 голос
/ 20 мая 2019

В функции foo ниже, если пользователь вводит 4 data.frame s a, b, x, y, существует ли способ для функции rbind, основанный на запрошено set.size?

Например, если пользователь использует set.size = c(2, 2), то первые 2 data.frame s (a и b) будут rbind ed, а затем x y будет rbind ред.

Это достижимо?

a <- data.frame(d = 1, cont = T)
b <- data.frame(d = 3, cont = T)
x <- data.frame(d = 3:5, cont = c(F, F, F))
y <- data.frame(d = 1:3, cont = c(F, F, F))


foo <- function(..., set.size = c(2, 2)){

  rbind(... = ...)
}

Ответы [ 2 ]

3 голосов
/ 20 мая 2019

Вот опция, которая использует аргумент «группировки» в форме, предложенной Джораном:

a <- data.frame(d = 1, cont = TRUE)
b <- data.frame(d = 3, cont = TRUE)
x <- data.frame(d = 3:5, cont = c(FALSE, FALSE, FALSE))
y <- data.frame(d = 1:3, cont = c(FALSE, FALSE, FALSE))

foo <- function(..., ii) {
    ll <- split(list(...), ii)
    lapply(ll, function(X) do.call(rbind, X))
}

## Try it out
foo(a, b, x, y, ii = c(1,1,2,2))
3 голосов
/ 20 мая 2019

Опция будет

foo <- function(..., set.size = c(2, 2)){
    v1 <- rep(seq_along(set.size), set.size)
    lst1 <- list(...)
    lapply(split(lst1, v1), function(x) do.call(rbind, x))

}

foo(a, b, x, y, set.size = c(2, 2))

data

a <- data.frame(d = 1, cont = T)
b <- data.frame(d = 3, cont = T)
x <- data.frame(d = 3:5, cont = c(F, F, F))
y <- data.frame(d = 1:3, cont = c(F, F, F))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...