【问题标题】:How to extract values from a nested list with a for-loop (or other functions) and add them to a data frame?如何使用 for 循环(或其他函数)从嵌套列表中提取值并将它们添加到数据框中?
【发布时间】:2021-01-28 11:07:43
【问题描述】:

我正在尝试计算四个数据集(列)中每个基因(行名)的 meta-p 值,并将它们作为第五列添加到我的 df 中。所以基本上现在我每行都有 4 个 p 值。我正在使用 metap 包(函数 sumz),它需要一个 p 值向量作为输入。我对编写 for 循环等完全陌生,所以我很挣扎。

到目前为止,我设法将 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

【问题讨论】:

    标签: r for-loop extract nested-lists


    【解决方案1】:

    试试sapply

    df$meta_p <- sapply(x,`[[`, 'p')
    

    【讨论】:

    • 感谢您的快速回复!成功了,非常感谢
    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多