【问题标题】:lapply() on list of dataframeslapply() 在数据框列表上
【发布时间】:2020-06-05 06:58:34
【问题描述】:

我想将相同的函数应用于数据框列表并使用新数据框创建一个新列表。实际上,我非常接近问题的解决方案,但我停了下来,在网上找不到解决方案。

O_peaks = lapply(O, function(x){
               get_peaks(O[[x]][[1]], O[[x]][[2]], 
                         ignore_threshold = 0, span = 71, strict = TRUE, x_unit = "", x_digits = 3)
}) 

我认为我误用了 [[x]]。我测试了一个类似的代码:

O_peaks = lapply(O, function(x){
  get_peaks(O[[1]][[1]], O[[1]][[2]], 
            ignore_threshold = 0, span = 71, strict = TRUE, x_unit = "", x_digits = 3)
    })

在这种情况下,我获得了一个新列表,其中包含相同数量的 O 数据帧,但由于我写了O[[1]][[1]], O[[1]][[2]],新数据帧仅包含 O 中第一个数据帧的信息。

关于如何将相同的功能应用于我的所有数据框有什么建议吗?

提前谢谢你。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 很难知道没有例子,但我会尝试将get_peaks(O[[x]][[1]], O[[x]][[2]],更改为get_peaks(x[[1]], x[[2]],
  • 您能否分享一下您的数据框的外观以及您想用它们做什么(即该功能应该做什么)?它会帮助其他人弄清楚发生了什么。此外,这更像是一个一般性建议,但考虑为您的数据框和变量提供信息性名称(例如“data_list”而不是“O”),这将使编码更加容易。
  • 谢谢你,@BrianDavis!它有效!
  • 我很高兴它有效@Agnese。在向lapply 提供列表时,将每个列表项想象为函数的参数迭代循环是很有帮助的。如果您使用 1:length(O) 而不是 O 作为 lapply 输入,您的原始代码可能会起作用。

标签: r list function dataframe lapply


【解决方案1】:

您用于索引的 X 是列表中的每个数据框,因此这可能不是您想要的。当您写O[[1]][[1]] 时,您要求的是列表中第一个数据框中的第一列。如果你有一个函数,比如foo,它接收一个数据帧作为参数并返回你需要的数据帧,可以做类似

lapply(O, foo)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 2021-10-22
    • 2021-01-07
    相关资源
    最近更新 更多