基础问题:如何使用 R 将列表向量转换为 table?

Basics question: How can I convert a list vector to a table with R?

我有一个非常基本的问题,但一直找不到答案,因为我不是 100% 清楚如何提问。我发现似乎合适的教程都过于简单,缺少一些关键信息。
我有一个已处理数据的列表向量,我正在尝试将其转换为 table 以进行下游分析,但我被卡住了。 目前我有一个包含 4088 个数值数据点的值列表。 'Data' 的元数据有我的子类型信息。我以这种方式生成列表:

vec <-vector("list",3)
vec[[1]] <- Values[which(colData(Data)$Type=="Type1")] 
vec[[2]] <- Values[which(colData(Data)$Type=="Type2")] 
vec[[3]] <- Values[which(colData(Data)$Type=="Type3")] 

现在,[[1]] 只是我关心的类型 1 的值,[[2]] 是类型 2 的值,等等。 那么,我如何将其转换为数据框或 table 用于组间 T 测试等下游内容?下面的读数告诉我我需要以某种方式定义我的数据,并且每组的点数不同是个问题,但我完全迷失在这里。

df <- as.data.frame(vec)
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : 
  arguments imply differing number of rows: 1461, 658, 1969

感谢您的帮助,或者只是指导教程,帮助我自己回答这个问题!

实际上有几个选项可供您使用。

#base R
data.frame(lapply(vec, "length<-", max(lengths(vec))))

#Data Table
library(data.table)
setDT(lapply(vec, "length<-", max(lengths(vec))))

这实际上取决于您的下游步骤是什么,但您可以生成最大长度为 lengths(vec)data.frame 行数(这将用 [=13= 填充向量] - 确保之后如何处理 NA)。如何获得这样的 data.frame 的示例可以在@AndyBrown

的答案中找到

具体来说,要在组之间执行 t 检验,您不需要生成 data.frame。您可以使用列表元素的成对组合,它们可以具有不同的长度。 下面是一个使用 vec 列表元素的所有成对组合来执行 t 检验的示例:

lapply(combn(vec, 2, simplify=FALSE), function(x) t.test(x[[1]], x[[2]]))