我将如何编写 purrr::keep 的递归版本?

2023-12-20

假设我有一个嵌套列表,其中包含一堆不同级别的数据框。我想提取出数据框的扁平列表。我该如何写这个使用purrr功能?我应该看一下reduce?

例如,给定数据:

s <- list(x = 1:10,
          data = data.frame(report = LETTERS[1:5],
                            value = rnorm(5, 20, 5)),
          report = list(A = data.frame(x = 1:3, y = c(2, 4, 6)),
                        B = data.frame(x = 1:3, y = c(3, 6, 9)),
                        z = 4:10,
                        other = data.frame(w = 3:5,
                                       color = c("red", "green", "blue"))))

我希望函数返回:

list(data = data.frame(report = LETTERS[1:5],
                       value = rnorm(5, 20, 5)),
     `report$A` = data.frame(x = 1:3, y = c(2, 4, 6)),
     `report$B` = data.frame(x = 1:3, y = c(3, 6, 9)),
     `report$other` = data.frame(w = 3:5,
                                 color = c("red", "green", "blue")))

我写了一个递归函数:

recursive_keep <- function(.x, .f) {
  loop <- function(.y) {
    if(is.list(.y)) {
      c(keep(.y, .f), flatten(map(discard(.y, .f), loop)))
    } else if(.f(.y)) {
      .y
    } else {
      NULL
    }
  }
  loop(.x)
}

它可以被称为:

recursive_keep(s, is.data.frame)

它似乎适用于此示例,但它不保留名称信息。我希望保留足够的信息,以便我可以从原始对象中提取数据。也许这是一个更容易回答的问题?


这个具有一行主体的递归函数保留名称并且不使用包:

rec <- function(x, FUN = is.data.frame)
  if (FUN(x)) list(x) else if (is.list(x)) do.call("c", lapply(x, rec, FUN))

str(rec(s))  # test

给出(输出后继续):

List of 4
 $ data        :'data.frame':   5 obs. of  2 variables:
  ..$ report: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
  ..$ value : num [1:5] 29.1 19.9 21.2 13 25.2
 $ report.A    :'data.frame':   3 obs. of  2 variables:
  ..$ x: int [1:3] 1 2 3
  ..$ y: num [1:3] 2 4 6
 $ report.B    :'data.frame':   3 obs. of  2 variables:
  ..$ x: int [1:3] 1 2 3
  ..$ y: num [1:3] 3 6 9
 $ report.other:'data.frame':   3 obs. of  2 variables:
  ..$ w    : int [1:3] 3 4 5
  ..$ color: Factor w/ 3 levels "blue","green",..: 3 2 1

关于获得,比如说,A从内部report从原始对象s:

s[["report"]][["A"]]

or

ix <- c("report", "A")
s[[ix]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我将如何编写 purrr::keep 的递归版本? 的相关文章

  • dplyr +“meta”-columns:当列包含要使用的其他列的名称而不是数据时

    我想知道以下问题在 dplyr 中是否有一个优雅的解决方案 要提供一个简单的可重现示例 请考虑以下 data frame df lt data frame a 1 5 b 2 6 c 3 7 ref c a a b b c stringsA
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1
  • 将函数应用于矩阵列表

    我有一个矩阵列表 注意 它们的维度与此示例不同 x lt matrix 1 10 ncol 2 y lt x 300 mylist lt list x y 我想运行一个函数networklevel在矩阵列表中的每个矩阵上 该函数有各种可以计
  • R 中 nlme 包中的 gls 函数出错

    我不断收到这样的错误 Error in coef lt corARMA tmp value c 18 3113452983211 1 56626248550284 Coefficient matrix not invertible 或者像这
  • 将文件夹中的多个 csv 文件读取到 R 中的单个数据帧中[重复]

    这个问题在这里已经有答案了 我有一个包含 332 个 csv 文件的文件夹 文件名称如下 001 csv 002 csv 003 csv 330 csv 331 csv 332 csv 所有文件都具有相同数量的变量和相同的格式 我需要读取一
  • 如何更改 r 中的树状图标签

    我在 R 中有一个树形图 它基于使用 hclust 的分层聚类 我正在对不同颜色的标签进行着色 但是当我尝试使用以下命令更改树图的标签 集群所基于的数据帧的行 时dendrogram dendrogram gt set labels dat
  • mlogit:需要 TRUE/FALSE 时缺少值

    我有来自离散选择实验 DCE 的数据 该实验研究了来自不同行业的个人的招聘偏好 我已经格式化为长格式 我想使用 mlogit 进行建模 我已导出数据 并且可以使用 asclogit 命令在 Stata 中成功运行模型 但在 R 中运行时遇到
  • 在 R 中使用深度网络和 MNIST 数据读取手写数字第 3 部分

    我尝试编写一个基于深度网络的程序来读取手写数字 我在 Youtube 上找到了一个代码 https www youtube com watch v 5bso 5X7Zu4 https www youtube com watch v 5bso
  • data.table 的包装函数

    我有一个已经使用 data frame 上下文编写的项目 为了缩短计算时间 我尝试利用 data table 的速度 我的方法是构造包装函数 读取帧 将它们转换为表 进行计算 然后转换回帧 这是一个简单的例子 FastAgg lt func
  • 正则表达式提取美国邮政编码,但不提取假代码

    使用 XML 包和 XPath 从网站上抓取地址 有时我只能得到一个嵌入了我想要的邮政编码的字符串 提取邮政编码很简单 但有时会显示其他五位数字的字符串 以下是 df 中问题的一些变体 zips lt data frame id seq 1
  • 如何通过组度量的平均值在 df 内排列 dplyr:: 组?

    借鉴吴卡拉的设计https stackoverflow com a 26555424 9350837 https stackoverflow com a 26555424 9350837答案 我希望根据各个组汇总测量的平均值对分组 df 进
  • 在 Windows / Linux 中创建 Mac 包

    我自己努力制作一个 r 包 我按照 stackoverflow 中上一个问题的说明进行操作如何为外行开发软件包 http cran r project org bin windows Rtools 以下是我根据上一个问题采取的步骤 在新的
  • Shiny :针对所有错误显示一条消息

    我在 R 的 Shiny 中有一个应用程序 我想处理消息 以便用户看不到发生了什么错误 我知道通过 tags style type text css shiny output error visibility hidden shiny ou
  • 如何创建 highcharter 事件函数以在 Shiny R 中创建“下拉函数”

    我正在建造一个shiny应用程序 我想要完成的事情之一是创建一个下拉菜单 我想将劳动力变量绘制为不同级别的年份变量的函数 请参阅下面的示例数据框 year level 2 level 3 labour 1 2013 10 101 1 2 2
  • R 无法回忆起内存中的对象

    我正在构建一个包含多个步骤的函数 其中每个步骤都会创建一个对象 某个步骤失败 temp3 并且无法找到前面的步骤对象 错误 未找到对象 temp2 我不知道为什么 我有类似的函数 遵循完全相同的结构 每个步骤都遵循先前创建的对象 在函数内
  • 如果值大于或小于,则替换数据框中的值

    我在 R 中操作数据帧时遇到问题 这是 R 中的基本内容 但我找不到执行此类操作的最佳命令 虚拟示例 Var1 20 300 39 Var2 49 23 91 Var3 0 239 210 我怎样才能用10如果值小于 则在第 2 列中10
  • ggplot2 + 使用比例 X 的日期结构

    我真的需要帮助 因为我已经迷路了 我正在尝试创建一个折线图 显示几个团队一年来的表现 我将一年分为几个季度 2012 年 1 月 1 日 2012 年 4 月 1 日 2012 年 8 月 1 日 12 1 12 并将 csv 数据帧加载到
  • ggplot 按因子和梯度颜色

    我正在尝试绘制一个对两个变量 一个因子和一个强度 进行着色的图 我希望每个因素都是不同的颜色 并且我希望强度是白色和该颜色之间的渐变 到目前为止 我已经使用了诸如对因子进行分面等技术 将颜色设置为两个变量之间的相互作用 并将颜色设置为因子并
  • 从 leafletProxy() 返回渲染的传单地图

    是否可以在渲染后在 Shiny 中检索传单地图 下面是一个代码示例 展示了如何生成地图leaflet 与返回的不同leafletProxy 即使它们在渲染时看起来完全相同 是否有一个功能可能不同于leafletProxy 获取实际的 htm
  • 解压 R 数据框中的列表

    我有一个dataframe其中一个字段包含不同长度的列表 我想将该字段中列表的每个元素提取到其自己的字段中 以便我可以将结果收集到一个很长的字段中dataframe每个列表元素都有一个 id 这是一个例子dataframe dat lt s

随机推荐

  • 如何通过货币名称获取货币符号?

    我想要获得货币符号 例如 or 按货币名称 例如USD or EUR 对于英语 美国 我可以获得符号 如果英语 美国 设置为设备上的语言 Currency currency Currency getInstance Locale getDe
  • Firebase 在 iOS 上使用 Swift 多次调用“Observe”

    当我开始observer在 Firebase 数据库节点上 我注意到 Firebase 继续调用该方法observer即使没有数据变化 这是我的设置 FIRDatabase database reference withPath test
  • 如何正确配置嵌入式 OpenEJB 容器进行测试?

    这是我的 SLSB Stateless public class MyService PersistenceContext unitName abc EntityManager em public boolean exists int id
  • Intellij IDEA 未从 Groovy 项目中的 @Grab 导入依赖项

    我正在处理一个 groovy 脚本 它使用 Grab 注释导入依赖项 该脚本将在 IDEA 中从命令行运行 但是 在 IDE 中 导入显示为红色 不可解析 并且不会对导入的类提供自动完成功能 我正在通过代理访问企业存储库 该代理已在 IDE
  • 为 C++ 应用程序提供 HTTP Web 服务器功能

    我有一个 C 应用程序 正在寻找一个库 使其成为能够提供静态文件以及执行非常简单的任务的 HTTP 服务器 唯一的限制是它必须是跨平台的 我有什么选择 澄清 我的应用程序需要一个 Web 界面 该应用程序是执行其他任务的后台程序 我想提供一
  • 使用 HTML5 验证多个电子邮件地址

    我正在尝试构建一个电子邮件表单 该表单将多个逗号分隔的电子邮件作为输入并使用 HTML5 验证它们 我想使用以下正则表达式来检查输入的完整性 b A Za z0 9 A Za z0 9 A Za z 2 4 b 这是我尝试过的 这似乎不适用
  • 如何在 CakePHP 中定义模型的“全局”查找条件?

    是否可以定义在使用特定模型的所有控制器和功能中始终有效的查找条件 例如 如果我只想退回有库存的产品 无论如何 也许在模型中的某个地方 conditions gt array inStock gt gt 0 我认为您可以尝试在模型上执行一个函
  • 如何使用puppet为不同用户设置自定义bash环境?

    我刚刚开始使用 puppet 和 vagrant 为我们的团队设置开发环境 该团队由 8 名以上的开发人员组成 每个人都有其特定的 bash 配置等 我已经将所有软件安装在系统来快速部署新的开发虚拟机 但我不确定以自动化的方式为每个特定用户
  • Gradle 错误:字符串索引超出范围:0

    尝试使用 Gradle 编译 Android 项目并收到奇怪的错误 当我跑步时 gradlew tasks stacktrace 尝试过干净的重建 新的仓库克隆 不同的分支 同事能够构建 aok 寻找要检查 尝试解决此问题的想法 更新 恢复
  • Selenium 和 Geckodriver 在 Python 中创建 Webdriver 时出现问题

    我在 python 爬虫中有一段代码曾经可以工作 我将其安装在新系统上 现在正在尝试获取正确的依赖项 使用geckodriver 0 13 0并执行以下代码时 def login self print self colors OKBLUE
  • “你好世界”从何而来?

    hello world 通常是任何编程语言的第一个示例 我一直想知道这句话是从哪里来的 又是在哪里第一次使用的 我曾经被告知这是有史以来在计算机屏幕上显示的第一句话 但我找不到任何对此的参考 所以我的问题是 练习在哪里使用 hello wo
  • 有没有办法为 Kotlin 顶级函数引用 Java 类?

    我想使用以下方式在顶级函数中加载资源Class getResourceAsStream 有什么方法可以获取顶级函数将被编译到的类的引用 以便我可以编写 例如 val myThing readFromStream MYCLASS getRes
  • 如何在 IntelliJ 插件中“注册”新的模块类型?

    我是 IntelliJ 插件开发的初学者 但我希望我的插件在 新项目 新模块 窗口中注册新的模块类型 我已经搜索了插件开发人员的文档 但找不到任何有用的东西 我还查看了 Kotlin 和 Scala 等现有插件 它们也添加了新的模块类型 但
  • 是否有 Java OCR 工具将文本图像转换为可编辑的文本文件?

    我正在开发一个项目 该项目需要拍摄文本 来自任何文本的硬拷贝 并将该文本转换为文本文件 然后我想使用该文本文件来做一些不同的事情 例如提供新闻文章的超链接或允许用户编辑文档 到目前为止我尝试过的工具是来自sourceforge net的Ja
  • 在选择之前和之后添加和删除字符

    我怎样才能获得角色before AND after选定的文本 然后删除它们 或者更确切地说 如果所选文本在字符内 请删除周围的字符 这样如果有任何额外的空格 字符仍将被删除 例如 双击文本时 它将选择文本 但不会选择前后的反引号 然后我想删
  • 调用 DriveApp getFolderById 或 getFileById 时 Google 附加脚本引发服务器错误

    我已经部署了一个电子表格绑定脚本作为附加组件 当它是容器绑定时它起作用了 但现在 作为附加组件 当我调用 DriveApp getFolderById 时 我收到服务器错误 function makeMap console log star
  • documentFragment.cloneNode(true) 不会克隆 jQuery 数据

    我有一个 documentFragment 其中有几个子节点 其中添加了一些 data 如下所示 myDocumentFragment document createDocumentFragment for myDocumentFragme
  • vuejs 从子组件更新父数据

    我开始玩 vuejs 2 0 我构建了一个简单的页面 其中包含一个组件 该页面有一个带有数据的 Vue 实例 在该页面上 我注册了该组件并将其添加到 html 中 该组件有一个input type text 我希望该值反映在父级 主 Vue
  • 相对于彼此定位多个嵌套 div

    我有一个外部 div 外部 div 内的 div 以及这些 div 内的 div 我想将最里面的 div 定位到它的父级 将中间级别的 div 定位到它的父级 即最外面的 div 对于 div 内的 div 我们可以使用父 div 的相对定
  • 我将如何编写 purrr::keep 的递归版本?

    假设我有一个嵌套列表 其中包含一堆不同级别的数据框 我想提取出数据框的扁平列表 我该如何写这个使用purrr功能 我应该看一下reduce 例如 给定数据 s lt list x 1 10 data data frame report LE