Мы можем использовать 'n.x', чтобы создать вектор группировки для split
data.frame в list
из data.frame
s
foo <- function(x, n.x, long) {
d1 <- data.frame(a = x, long)
lst1 <- split(d1, list(rep(seq_along(n.x), n.x), long), drop = TRUE)
names(lst1) <- paste0("Study", seq_along(lst1))
lst1 <- lapply(lst1, `row.names<-`, NULL)
lapply(lst1, function(x) setNames(x, c("a", c("short", "long")[x$long[1] +1])))
}
foo(1:4, c(1, 2, 1), c(TRUE, FALSE, TRUE, TRUE))
#$Study1
# a short
#1 2 FALSE
#$Study2
# a long
#1 1 TRUE
#$Study3
# a long
#1 3 TRUE
#$Study4
# a long
#1 4 TRUE
Если нам нужно передать еще один вектор ('nn') и присвоить ему имена строк
foo <- function(x, n.x, long, nn, rowName = "character") {
nn <- if(rowName == "character") {
nn
} else as.integer(factor(nn))
d1 <- data.frame(a = x, long)
row.names(d1) <- nn
lst1 <- split(d1, list(rep(seq_along(n.x), n.x), long), drop = TRUE)
names(lst1) <- paste0("Study", seq_along(lst1))
#lst1 <- lapply(lst1, `row.names<-`, NULL)
lapply(lst1, function(x)
setNames(x, c("a", c("short", "long")[x$long[1] +1])))
}
nn <- c("bigi, gigi, cigi", "fifi")
nn1 <- unlist(strsplit(nn, ", "))
foo(1:4, c(1, 2, 1), c(TRUE, FALSE, TRUE, TRUE), nn1, rowName = "integer")