我想知道如何让下面的函数输出length(n.x)
,data.frame
的列表,每个data.frame
中都有n.x[i]
行。
x
是向量,n.x
确定要从x
中提取的元素数量,而length(n.x)
确定要成为{{1 }}。
例如,如果data.frame
和x = 1:5
,我希望n.x = c(2, 3)
的前两个元素(即x
和1
)成为一个{ {1}},以及2
的后3个元素(即data.frame
)成为另一个x
。然后,我希望将这两个3, 4, 5
作为列表输出。
更新:某些data.frame
可以有data.frame
,有些x
。在将呼叫另存为对象(例如long= T
)之后,用户可以使用long= F
提取要提取a
和a$study1$long
的{{1}} x
的{{1}}个?
long = T
答案 0 :(得分:1)
我们可以使用'n.x'创建分组向量,以将{.1} s的data.frame split
s中list
data.frame
如果我们需要再传递一个向量('nn')并将其分配为行名
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