如何使用 for 循环(或其他函数)从嵌套列表中提取值并将它们添加到数据框中?
How to extract values from a nested list with a for-loop (or other functions) and add them to a data frame?
我正在尝试计算四个数据集(列)中每个基因(行名)的元 p 值,并将它们作为第五列添加到我的 df 中。所以基本上现在我每一行都有 4 个 p 值。我正在使用 metap 包(函数 sumz),它需要一个 p 值向量作为输入。我对编写循环等完全陌生,所以我很挣扎。
到目前为止,我设法将 sumz 函数应用于每个基因(因此应用于每一行)。
首先,我只是将我感兴趣的调整后的 p 值拉入 df:
df <- df.all[,c(5,10,15,20)]
然后我使用了apply函数:
x <- apply(df, MARGIN = 1, FUN = sumz)
这创建了一个嵌套列表 x,每个基因都有一个子列表。所以我的列表 x 有 138 个子列表(每个子列表由一个特定的基因名称调用),然后每个基因里面有四个“因素”,包括我感兴趣的 p 值。
获得单个 p 值:x$gene$p 或 x[[gene]]$p
现在,我试图从嵌套列表 x 中提取每个 p 并将其作为第五列添加到我的 df 中,名为“meta_p”。
我尝试了很多for循环的组合,例如:
for (i in 1:length(x)) {
meta_p <- x[[i]]$p
}
或
for (i in 1:length(x)) {
df$meta_p <- x[[i]]$p
}
但它们不起作用,只能提取单个值等。
对于从我的嵌套列表中提取 p 值的任何帮助,我将不胜感激。最好有解释,因为我真的很想了解 for 循环。
最佳,
K
试试 sapply
:
df$meta_p <- sapply(x,`[[`, 'p')
我正在尝试计算四个数据集(列)中每个基因(行名)的元 p 值,并将它们作为第五列添加到我的 df 中。所以基本上现在我每一行都有 4 个 p 值。我正在使用 metap 包(函数 sumz),它需要一个 p 值向量作为输入。我对编写循环等完全陌生,所以我很挣扎。
到目前为止,我设法将 sumz 函数应用于每个基因(因此应用于每一行)。 首先,我只是将我感兴趣的调整后的 p 值拉入 df:
df <- df.all[,c(5,10,15,20)]
然后我使用了apply函数:
x <- apply(df, MARGIN = 1, FUN = sumz)
这创建了一个嵌套列表 x,每个基因都有一个子列表。所以我的列表 x 有 138 个子列表(每个子列表由一个特定的基因名称调用),然后每个基因里面有四个“因素”,包括我感兴趣的 p 值。
获得单个 p 值:x$gene$p 或 x[[gene]]$p
现在,我试图从嵌套列表 x 中提取每个 p 并将其作为第五列添加到我的 df 中,名为“meta_p”。
我尝试了很多for循环的组合,例如:
for (i in 1:length(x)) {
meta_p <- x[[i]]$p
}
或
for (i in 1:length(x)) {
df$meta_p <- x[[i]]$p
}
但它们不起作用,只能提取单个值等。 对于从我的嵌套列表中提取 p 值的任何帮助,我将不胜感激。最好有解释,因为我真的很想了解 for 循环。
最佳,
K
试试 sapply
:
df$meta_p <- sapply(x,`[[`, 'p')