【问题标题】:R. Apply same function to similar data frames. Generate new data frames with same name patternR. 将相同的功能应用于相似的数据帧。生成具有相同名称模式的新数据框
【发布时间】:2017-10-26 14:50:18
【问题描述】:

我看过类似的帖子,但没有人专门解决这个问题。我有 22 个数据帧,称为 chr1、chr2、chr3、...、chr22。我想将自制函数“diff_set”应用于所有这些数据帧,并生成 22 个名为 chr1.1、chr2.1、chr3.1、...、chr22.1 的新数据帧。该函数应用于其中一列。例如,对于 chr1,我应用 diff_set 并生成 chr1.1:

chr1.1 = diff_set(chr1$POSITION, 200000)

欢迎提出任何建议!

【问题讨论】:

  • 我不知道有一种方法可以轻松完成这么多任务。您可以使用apply 系列或purrr::map 将该函数应用于您的数据框列表,返回数据框列表;但它不会单独存储每个数据帧
  • 我敦促您处理 list of data.frames 而不是单独的 data.frames。如果您将所有chr1 等都存储在单个框架列表名称chrs 中,那么这个问题的答案可能只是newchrs <- lapply(chrs, diff_set, 200000)

标签: r for-loop dataframe apply


【解决方案1】:

只需 lapply 函数上的数据框列表,diff_set,重命名输出列表,然后如果确实需要但应避免运行 list2env 以将单个 dfs 保存为单独的对象:

output_list <- lapply(mget(paste0("chr", seq(1,22))),
                      function(df) diff_set(df$POSITION, 20000))

output_list <- setNames(output_list, paste0("chr", seq(1,22)+0.1))

# FIRST THREE DFS
output_list$chr1.1
output_list$chr2.1
output_list$chr3.1

# OUTPUT EACH DF AS SEPARATE OBJECT
# (BUT CONSIDER AVOIDING THIS AS YOU FLOOD GLOBAL ENVIRONMENT)
list2env(output_list, envir=.GlobalEnv)

【讨论】:

  • +1 表示“考虑避免这种情况”……我多次发现维护不善的代码以这种方式覆盖了全局变量;这是一个很难追踪的错误!
  • 您好@Parfait,当我执行 output_list$chr1.1 时,我只得到计算函数 diff_set 的列的向量,而不是数据框中的其余列。有什么建议吗?非常感谢您的帮助
  • 嗯...我会检查您的 diff_set 函数,因为它可能不会像您在上面声称的原始帖子那样返回数据帧。始终检查函数的最后一行或使用return(df)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2020-07-11
  • 2017-01-24
  • 2014-03-27
  • 2016-05-03
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多