如何构建自动更新的拖放层次树

2023-12-20

我目前正在 R 工作,需要一种可视化分层树的方法......

我希望能够最初定义一棵树,其中每个节点都有一个父节点,每个父节点可以有多个子节点。

我希望能够将节点拖放到不同父级下并执行一些计算(在 R 中),然后在可视化上进行更新,例如假设每个节点都有一个值;当我将节点放在父节点下时,我想对子节点求和并将该值与父节点进行比较。

所以问题是是否有人有任何想法如何解决这个问题或尝试过类似的事情?

我一直在研究shiny(例如shinyDND)和javascript(例如gojs),但我可以使用一些建议,而不是陷入兔子洞。唯一需要注意的是,更新的计算需要在 R 中完成(它们比求和更复杂,并且将在我正在运行的分析中递归)。


shinyTree是一种可能性。但存在一些潜在的问题:可以将子项拖入子项,或将父项拖入子项,或将父项拖入父项。我不知道是否有办法防止这种情况(我认为没有内置的方法)。

library(shiny)
library(shinyTree)

values_parents <- function(tree){
  sapply(tree, function(parent) attr(parent, "stinfo"))
}

total_values_children <- function(tree){
  sapply(
    lapply(tree, function(parent){
      sapply(parent, function(children){
        attr(children, "stinfo")
      })
    }),
    function(x){if(is.list(x)) NA else sum(x)}
  )
}

ui <- fluidPage(
  tags$head(
    tags$style(HTML("pre {font-size: 17px;} .jstree-anchor {font-size: large;}"))
  ),
  fluidRow(
    column(
      width = 6,
      shinyTree("tree", dragAndDrop = TRUE, checkbox = FALSE)
    ),
    column(
      width = 6,
      tags$fieldset(
        tags$legend("Values of parents:"),
        verbatimTextOutput("parentsValues")
      ),
      br(),
      tags$fieldset(
        tags$legend("Total value of children:"),
        verbatimTextOutput("childrenTotalValue")
      )
    )
  )
)


server <- function(input, output, session) {
  
  output[["tree"]] <- renderTree({
    list(
      
      ParentA = structure(list(
        ChildrenA1 = structure(NA, stinfo = 5),
        ChildrenA2 = structure(NA, stinfo = 4)
      ), 
      stinfo = 10, stopened = FALSE),
      
      ParentB = structure(list(
        ChildrenB1 = structure(NA, stinfo = 6),
        ChildrenB2 = structure(NA, stinfo = 8)
      ), 
      stinfo = 12, stopened = FALSE)
      
    )
  })
  
  output[["parentsValues"]] <- renderPrint({
    values_parents(input[["tree"]])
  })
  
  output[["childrenTotalValue"]] <- renderPrint({
    total_values_children(input[["tree"]])
  })
    
}

shinyApp(ui, server)

EDIT

I started做一个新的包:jsTreeR https://github.com/stla/jsTreeR. As shinyTree,它是 JavaScript 库的 R 接口jsTree,但它允许更多控制。正如您在下面的示例中看到的,您不能拖动父级,也不能在子级内移动子级:

library(jsTreeR)

dat <- list(
  list(
    text = "RootA",
    data = list(value = 999),
    type = "root",
    children = list(
      list(
        text = "ChildA1",
        type = "child"
      ),
      list(
        text = "ChildA2",
        type = "child"
      )
    )
  ),
  list(
    text = "RootB",
    type = "root",
    children = list(
      list(
        text = "ChildB1",
        type = "child"
      ),
      list(
        text = "ChildB2",
        type = "child"
      )
    )
  )
)

types <- list(
  root = list(
    icon = "glyphicon glyphicon-ok"
  ),
  child = list(
    icon = "glyphicon glyphicon-file"
  )
)

checkCallback <- JS(
  "function(operation, node, parent, position, more) {",
  "  if(operation === 'move_node') {",
  "    if(parent.id === '#' || parent.type === 'child') {",
  "      return false;", # prevent moving a child above or below the root
  "    }",               # and moving inside a child
  "  }",
  "  return true;", # allow everything else
  "}"
)

dnd <- list(
  is_draggable = JS(
    "function(node) {",
    "  if(node[0].type !== 'child') {",
    "    return false;",
    "  }",
    "  return true;",
    "}"
  )
)

jstree(
  dat,
  dragAndDrop = TRUE, dnd = dnd,
  types = types,
  checkCallback = checkCallback
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何构建自动更新的拖放层次树 的相关文章

  • 如何让 print() 将参数传递给 R 中用户定义的打印方法?

    我在 R 中定义了一个 S3 类 它需要自己的打印方法 当我创建这些对象的列表并打印它时 R 按其应有的方式对列表中的每个元素使用我的打印方法 我想对打印方法实际显示的数量进行一些控制 因此 我的类的 print 方法需要一些额外的参数 但
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • 从 R 中的向量中选择所有可能的元组

    我正在尝试用 R 编写一个程序 当给定一个向量时 将返回所有可能的tuples http en wikipedia org wiki Tuples该向量中的元素 例如 元组 c a b c c a b c 出租车 c a c c b c c
  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • 基于另一个数据集获取数据集的子集

    假设我有一个数据集 即 dat1 ID block plot SPID TotHeight 1 1 1 4 44 5 2 1 1 4 51 3 1 1 4 28 7 4 1 1 4 24 5 5 1 1 4 27 3 6 1 1 4 20
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • 使用 broom 和 tidyverse 总结 r 平方游戏

    我发布了一个问题here https stackoverflow com questions 48627287 getting adjusted r squared value for each line in a geom smooth
  • 如何用外部图像填充地图边界?

    我正在创建一张带有州边界的巴西地图 这可以直接使用ggplot2 and geom sf 然而 这一次 我不想用数据填充每个状态的颜色 而是想用外部图像 png 填充每个状态的边界 类似于this https online olivet e
  • 在shiny中过滤传单地图数据

    我在用传单地图设置这个闪亮的东西时遇到了麻烦 我的原帖 https stackoverflow com questions 50111566 applying leaflet map bounds to filter data within
  • 如何删除箱线图上的刻度线

    我试图从箱线图中删除 x 轴刻度线 但保留与刻度线关联的标签 这在基础 R 中可能吗 colors lt c lightskyblue3 gray78 gold1 wheat1 boxplot avgscore module data mi
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不
  • 相当于 min() 的 rowMeans()

    我在 R 邮件列表上多次看到这个问题 但仍然找不到满意的答案 假设我有一个矩阵m m lt matrix rnorm 10000000 ncol 10 我可以通过以下方式获得每行的平均值 system time rowMeans m use
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集

随机推荐

  • Rails 如何验证文件格式?

    如何验证我的文件字段的格式是否正确 我希望图像字段验证它是 png jpg jpeg 以及结尾为 flv 的 flv 还有它的结尾为 mov 的 Quicktime 以及如何创建错误消息来告知该字段无效 我的 simple form for
  • 访问cookie过期时间owin

    我正在尝试访问 Owin 上的过期时间 我正在使用以下示例 访问 Owin Cookie 身份验证的 ExpireTimeSpan 属性以通知用户登录到期 https stackoverflow com questions 27107264
  • 如何在 PHP 中克隆 gd 资源

    我正在寻找用 PHP 创建的克隆图像imagecreatetruecolor或其他一些图像创建功能 正如评论中所说 不 你不能做出像这样简单的感情 copy original 这是因为资源是引用 不能像标量值一样被复制 例子 a image
  • 用于获取标签列表的 GCP API

    是否有用于获取资源标签的 GCP API 我想要获取 GCP 项目的所有标签的列表 如何获取GCP中的所有标签 基本上 GCP 资源管理器 API 返回每个资源的 Lebel 对象 但我想使用一个 API 调用获取所有标签的列表 我尝试了下
  • 如何获取 numpy 数组中最大值的所有索引?

    我有一个数字数组 最大值可能会出现多次 我们如何获得数组中所有出现最大值的索引集合 例如 对于以下数组 import numpy as np a np array 1 2 3 2 3 2 1 3 结果应该是 2 4 7 或等效的数组或元组
  • Docker - 使用多模块 Maven 项目进行多阶段构建

    我有一个具有 root 的 Maven 项目pom xml具有多个子文件夹作为模块和依赖项的文件 它看起来像这样
  • 导入错误:没有名为flask.ext.script的模块

    事实上我现在无法使用任何软件包 导入错误 没有名为flask ext script的模块 https i stack imgur com dARhF png 导入错误 没有名为 Pymongo 的模块 https i stack imgur
  • php删除大括号和里面的内容检索剩余

    want to 删除大括号内的 php 字符串的特定文本 包括大括号 它应该被删除 数据串如下所示 page header this text should not be removed menu list menu list 2 this
  • 在 Vue 3 中设置全局 Axios 标头

    我正在尝试使用 Axios 访问我的后端 Django 但在设置全局标头以在标头中包含 CSRF 令牌时遇到一些问题 这是到达我的服务器 import axios from axios async function loadCards va
  • C# 执行外部程序并捕获(流式传输)输出

    我正在编写一个程序来处理一些视频文件 我正在使用 ffmpeg 可执行文件将多个文件合并到一个文件中 该命令需要几分钟才能完成 因此 我需要一种方法来 监视 输出 并在 GUI 上显示进度条 查看以下 stackoverflow 主题 如何
  • 使用动态规划对列表进行分区

    我在这里发布了一些与我一直在尝试从事的项目相关的内容 但我不断遇到设计问题并且必须从头开始设计 所以我想知道我是否可以发布我正在尝试做的事情 并且有人可以帮助我了解如何获得我想要的结果 背景 我是编程新手 正在努力学习 因此 我开展了一个我
  • Binutils LD 创建巨大文件

    我正在尝试创建尽可能小的 ELF 我创建了一个像这样的测试文件 NASM 语法 SECTION text dd 0xdeadbeef 使用此链接描述文件 SECTIONS text text 然后我检查了平面二进制文件的大小 并通过两种方式
  • 将 UDF 应用于 Spark Dataframe 中的多个列

    我有一个如下所示的数据框 id age rbc bgr dm cad appet pe ane classification 3 48 0 normal 117 0 no no poor yes yes ckd 我写了一个 UDF 来转换分
  • 终止或停止 HtmlUnit

    我使用 htmlunit 测试一些网站 我注意到 Htmlunit 卡在一些网页上 这个问题导致调用 htmlunit 的线程不会终止 请您知道有什么方法可以停止 Htmlunit 就像在真正的网络浏览器中一样 您只需单击浏览器停止按钮即可
  • 考虑到每个静态库定义导出的功能(vc++ 2008),如何将多个静态链接库合并到一个 dll 中?

    鉴于每个静态库都定义导出功能 vc 2008 如何将多个静态链接库合并到单个 dll 中 在存在单个 dll 项目和静态链接的多个子项目 在 dll 项目中 的多项目布局中 尽管被标记为 declspec export 子项目 lib 中的
  • python Tkinter 中的简单加载屏幕

    我是一个Python初学者 尤其是tkinter 我想制作一个简单的 python 脚本的 加载屏幕 并在脚本结束后关闭 但制作窗户需要mainloop函数 这意味着它将无限循环或等待用户交互 或者我认为如此 并且它将消除 加载 屏幕的想法
  • Python 将 k-means 集群与实例关联

    我已阅读文档here http scikit learn org stable modules generated sklearn cluster KMeans html以及看着this http fromdatawithlove theg
  • 在 MongoDB 中搜索多个集合

    我知道 MongoDB 的理论以及不支持联接的事实 并且我应该尽可能使用嵌入文档或非规范化 但这里是 我有多个文档 例如 用户 嵌入了 Suburbs 但也有 名字 姓氏 郊区 其中嵌入州 嵌入 School 的 Child 属于 User
  • 在maven中查找定义属性的地方

    我目前正在各种项目和 git repo 中重构大量 pom xml 有时 项目 A 中的 pom 需要项目 B 中定义的工件 其版本由属性定义
  • 如何构建自动更新的拖放层次树

    我目前正在 R 工作 需要一种可视化分层树的方法 我希望能够最初定义一棵树 其中每个节点都有一个父节点 每个父节点可以有多个子节点 我希望能够将节点拖放到不同父级下并执行一些计算 在 R 中 然后在可视化上进行更新 例如假设每个节点都有一个