是否有一个简洁的 R“单行”或现有函数来反转列表的嵌套顺序?这意味着list[[i]][[j]]输入中的元素将映射到list[[j]][[i]]输出中。
例如,
my_input <- list(list(1,2,3), list('a','b','c'), list('foo','bar','baz'))
desired_output <- list(list(1,'a','foo'), list(2,'b','bar'), list(3,'c','baz'))
Run Code Online (Sandbox Code Playgroud)
1) transpose在 purrr 包中这样做:
library(purrr)
transpose(my_input)
Run Code Online (Sandbox Code Playgroud)
2)这也有效并且不使用任何包:
n <- length(my_input[[1]])
split(simplify2array(my_input), 1:n)
Run Code Online (Sandbox Code Playgroud)
2a)也可以写成:
s <- simplify2array(my_input)
split(s, 1:nrow(s))
Run Code Online (Sandbox Code Playgroud)
3)这是另一种方法:
split(do.call("c", my_input), sequence(lengths(my_input)))
Run Code Online (Sandbox Code Playgroud)
4)这是一种不使用的方法split:
as.list(as.data.frame(t(simplify2array(my_input))))
Run Code Online (Sandbox Code Playgroud)