通过 R 中的方向矩阵进行回溯

2024-06-28

我有一个这样的矩阵:

https://i.stack.imgur.com/mzeRI.png https://i.stack.imgur.com/mzeRI.png

你可以像这样加载它:

matrix = structure(c("-", "-", "C", "G", "C", "A", "-", "0", "V", "V", 
"V", "V", "C", "H", "D", "V", "DV", "V", "A", "H", "H", "D", 
"DV", "D", "C", "H", "DH", "DH", "D", "V", "G", "H", "H", "D", 
"H", "D", "T", "H", "H", "H", "DH", "DH", "A", "H", "H", "H", 
"DH", "D", "T", "H", "H", "H", "DH", "H"), .Dim = c(6L, 9L))

从右下角开始,目标是遵循方向(D = 对角移动到 0,H = 向左移动,V = 向上方移动),以便所有路径都到达零。正如您所看到的,有一些单元具有多个方向(例如DH)。

我试图通过这样的矩阵找到所有可能的路径。我用递归做到了。但我在正确存储路径方面遇到困难。似乎当函数返回到旧单元格以采取另一个方向时,它将路径附加到错误的列表中。

这是我的递归函数代码:

threading = function(matrix,i,j,list) { #Function wants the matrix to be threaded, number of rows and cols, and an empty list
  if (matrix[i,j] == 0) { #If the recursion has arrived at zero, stop and print out the path that arrived there
    print(list)
  }
  else { #If still elsewhere inside the matrix...
    for (move in strsplit(matrix[i,j],"")[[1]]) { #Iterate through each move in that cell
      if (move == "D") { #If a move is D...
        list = paste(list, "D", sep="") #Append that to the path
        threading(matrix,i-1,j-1,list) #Send the function to the diagonal cell
      }
      if (move == "V") { #If a move is V...
        list = paste(list, "V", sep="") #Append that to the path
        threading(matrix,i-1,j,list) #Send the function to the above cell
      }
      if (move == "H") { #If a move is H...
        list = paste(list, "H", sep="") #Append that to the path
        threading(matrix,i,j-1,list) #Send the function to the left cell
      }
    }
  }
}

因此,当我使用上面的矩阵运行它时,它会给出以下输出:

> threading(matrix, 6,9, emptylist)
[1] "HDDDDHH"
[1] "HDDDDHHD"
[1] "HDDHHDDD"

更关键的是,后两条路径的第二个字符是错误的,但其他一切都是正确的。我该如何避免这种情况?我不知道如何正确存储路径而不返回到旧路径。我认为这与附加的顺序和将函数发送到下一个单元格有关,但如果我反转它们,那么附加永远不会发生......


问题在于:

list = paste(list, "*", sep="")

当您点击有两个选择的单元格时,例如“VH”,for循环将经历两次迭代:list由第一次迭代修改,然后将该修改值传递给第二次迭代。相反,每次迭代都必须使用原始值。所以你可以替换为:

l = paste(list, "*", sep="")

并通过l代替list to the threading call.

另外,避免命名变量是一个很好的做法matrix or list因为它们也是函数的名称。

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

通过 R 中的方向矩阵进行回溯 的相关文章

  • 使用 cmd 和 R 配置 databricks

    我正在尝试使用 databricks cli 并调用 databricks 配置 这就是我从 cmd 执行此操作的方法 somepath gt databricks configure token Databricks Host shoul
  • 在 python numpy 中构建一个 nxn 矩阵,对于任何 n

    是否可以使用 python 的 numpy 版本 3 3 编写构建 nxn 矩阵的代码 而不指定 n 我需要将条目索引为 A i j 或类似的东西 但我什至不知道如何定义 A i j 以便它们实际上是对象 我认为这样的事情可能会起作用 n
  • 在 R 中组合/合并列

    我可能在这个问题上遗漏了一些很容易的东西 我在任何地方都找不到正确的答案 我真的需要继续前进 所以我过度简化了我的数据 eventID lt c 2 4 Time lt c 09 32 09 43 df1 lt data frame eve
  • knitr pandoc:“无法使用 pdf writer 生成 pdf 输出”

    Up front using pandoc 在knitr中 当尝试将 md或 Rmd编译为PDF时 它会抱怨 我正在简化流程可重复的研究 正如许多地方所记录的那样 我在用着pandoc and knitr并制作出色的文档 我还试图为一些不太
  • R 绘制一些 unicode 字符,但不绘制其他字符

    我们的系统管理员刚刚将我们的操作系统升级到 SLES12SP1 我重新安装了 Rv3 2 3 并尝试绘图 我用cairo pdf并尝试绘制 x 标签为的图 u0298即太阳能符号 但它不起作用 标签只是空白 例如 cairo pdf Rpl
  • 带有 selectInputs 的 DT 数据表在选择后重置回左侧

    我在 Shiny 应用程序的 DT 数据表的列中使用 selectInputs 感谢一些帮助here https stackoverflow com questions 74620665 vertically center selectin
  • 在ggplot2中设置base_size时重叠轴标签

    我正在改变base size via theme set 当我在屏幕上查看结果图时 它看起来很棒 但是 当我将其另存为 pdf 时 x 轴标签有点太接近轴编号 一件小事 theme set theme bw base size 9 不会造成
  • 合并结果的行数多于一个数据框

    我有两个数据框 第一个包含 9994 行 第二个包含 60431 行 我想合并两个数据框 以便合并后的数据框包含两个数据框的组合列 但只包含 9994 行 但是 合并后我得到了超过 9994 行 我怎样才能确保这种情况不会发生 df1 re
  • 是否有一个 R 函数可以获取 n 个对象取 k P(n,k) 的排列数?

    或者我必须给予 P nk lt factorial n factorial n k or P nk lt choose n k factorial k 谢谢 我不知道任何现有的功能 如果 n 较大 您的第一个建议将会失败 当编写为函数时 你
  • 如何在其他脚本中包含(源)R 脚本

    我创建了一个实用程序 R 脚本 util R 我想从项目中的其他脚本中使用它 确保此脚本定义的函数可在我的其他脚本中运行的正确方法是什么 我正在寻找类似的东西require函数 仅在尚未加载的情况下加载包 我不想打电话source util
  • R 在列中按分隔符分割字符串

    我有一个包含几行的文件 例如 A B C awer ttp net Code 554 abcd ttp net Code 747 asdf ttp net Part 554 xyz ttp net Part 747 我想使用 R 仅拆分表的
  • Shiny:合并 DT::datatable 中的单元格

    我想以闪亮的方式合并 DT datatable 列中的几行 可以这样做吗 目前我能够输出如下所示 但理想情况下 我想合并行并希望输出如下所示的内容 是否可以在 DT datatable 中合并这样的行 在以下人员的帮助下这是可能的数据表行组
  • 照片与 r 中的图形对齐

    首先我想我需要在powerpoint中手动完成它 然后我想如果有解决方案的话可以尝试使用R 这是我的示例数据 set seed 123 myd lt expand grid cat LETTERS 1 5 cond c F T phase
  • 将嵌套 for 循环转换为 R 中的并行循环

    下面您可以在 R 中找到一段代码 我想将其转换为使用多个 CPU 作为并行进程运行 我尝试使用foreach包 但并没有走得太远 考虑到我有 3 级嵌套循环 我找不到一个很好的例子如何让它工作 我们将非常感谢您的帮助 下面的代码示例 我做了
  • R:读取多个Excel文件,提取第一个工作表名称,并创建新列

    我有多个 Excel 文件 并且它们具有唯一的工作表名称 在我的情况下是文件创建日期 我批量阅读它们 需要将工作表名称分配给新列 id 中的每个文件 我知道如何制作数字 id 或 id 文件名 但找不到将工作表名称获取为 id 的方法 li
  • 从数据框中提取具有最高值和最低值的行

    我对 R 还很陌生 我主要用它来可视化统计数据ggplot2图书馆 现在我遇到了数据准备的问题 我需要编写一个函数 该函数将从数据框中删除指定列中具有最高和最低值的一些数字 2 5 或 10 行 并将它们放入另一个数据框中 并对两个因素的每
  • R 中的因素:不仅仅是烦恼?

    R 中的基本数据类型之一是因子 根据我的经验 因素基本上是一种痛苦 我从不使用它们 我总是转换为字符 我感觉很奇怪 好像我错过了什么 是否有一些使用因子作为分组变量的函数的重要示例 其中因子数据类型变得必要 当我should使用因素 你应该
  • R 代码编程:在堆叠排序表上先向下填充缺失列值,然后向上填充

    我有一个包含 3 列的数据框 但第三列有一些缺失值 需要用以下逻辑填充 期望的结果是第三列 部分 上没有缺失值 要填充它 我们必须找到第一个 周 其中为该特定 项目 第一列 填充了 部分 值 并且然后通过向下复制 part 来填充它 直到找
  • ggplot2:使用 geom_bar 绘制平均值

    我有以下数据框 test2 lt data frame groups c rep group1 4 rep group2 4 X2 c rnorm 4 rnorm 4 label c rep 1 2 rep 2 2 rep 1 2 rep
  • 将多个ggplot2图保存为列表中的R对象并在网格中重新显示

    我想在大型 for 循环期间将多个绘图 使用 ggplot2 保存到列表中 然后随后在网格中显示图像 使用 grid arrange 我已经尝试了两种解决方案 1 将其存储在列表中 如下所示 pltlist qplot lt qplot 然

随机推荐

  • 如何在插入后获取插入的行 ID 以及相关数据而不插入相关数据

    我有一组数据需要在表中产生新行 创建此行后 我需要将元数据附加到与此信息相关的单独表中 那就是我需要创建我的 Identity 首先 得到GlobalId从行返回 然后附加 Accounts and Metadata to it 插入数据并
  • Aptana Studio 有 NodeJS 插件吗?

    Aptana Studio 有 NodeJS 插件吗 至少对于 NodeJS 代码辅助来说是这样 也许是创建 NodeJS 项目的一种方法 以及本地NodeJS调试 目前我们没有 NodeJS 支持 如果社区对此感兴趣 那么提交功能请求并对
  • 如何在 GAE Standard Go 中缩小到 0 个实例

    我已将 Golang 应用程序部署到 Google Cloud Platform 的 App Engine 标准环境 我的 app yaml 包含以下几行 automatic scaling min idle instances 0 max
  • C# ObservableCollection OnCollectionChanged 在项目更改时不会触发

    来自 MSDN 关于 OnCollectionChanged 的 内容 在添加 删除 更改 移动项目或刷新整个列表时发生 我正在更改附加到位于我的集合中的 obj 的属性 但 OnCollectionChanged 未触发 我正在 obj
  • jTextField 仅接受字母和空格

    我希望用户只输入字母或空格 如果用户输入其他字符 我想用 jOptionPane 给出消息 我已经搜索并尝试了下面的代码 if Pattern matches a zA Z answerField1 getText JOptionPane
  • Netty 的 HashedWheelTimer 和 Quartz 的调度程序哪个更高效?

    散列轮定时器 http docs jboss org netty 3 1 api org jboss netty util HashedWheelTimer html是基于这篇 1987 年的论文 http www cs columbia
  • 如何从Python中的文件路径中提取文件夹路径?

    我只想获取文件完整路径中的文件夹路径 例如T Data DBDesign DBDesign 93 v141b mdb我想得到只是T Data DBDesign 不包括 DBDesign 93 v141b mdb 我尝试过这样的事情 exis
  • 使用 Bootstrap 折叠侧边栏

    我刚刚访问了这个页面http www elmastudio de https web archive org web 20131015001517 https www elmastudio de 并想知道是否可以使用 Bootstrap 3
  • SwiftUI 显示带有绑定变量的工作表在首次显示时不起作用

    我试图在工作表中呈现一个带有 Binding String 变量的视图 该变量仅在 TextField 中显示 绑定该变量 在我的主 ContentView 中 我有一个字符串数组 我用 ForEach 循环遍历数组的索引来显示它 并显示一
  • magento - 删除扩展名?

    我购买了 magento 扩展并将文件复制到 magento 目录中 一切都很好 然后我想重新安装它 所以我删除了app code local中的所有相关文件 并删除了相关的数据库表 当我将扩展文件重新复制回 magento 目录并尝试测试
  • 如何使用java从Excel工作表中获取特定列名(作为参数传递)的最后一个非空单元格的行索引?

    模块的摘要 获取书籍名称 工作表名称和列名称作为参数 并期望模块返回所需的行索引 public int getExcelData String WBookName String sheetName String columnName int
  • RollingFileAppender 中动态文件命名的 log4net 中的问题

    我的配置文件中有 3 个附加程序 用于创建 3 种不同类型的日志 我通过设置全局上下文属性在 3 个附加程序中的每一个中使用文件的动态命名 在某些情况下 我需要为 1 个附加程序动态设置日志文件名 当我仅为 1 个附加程序设置文件名时 除了
  • HashMap元素的顺序可以重现吗?

    首先 我想澄清的是 我永远不会使用 HashMap 来做需要某种数据结构顺序的事情 并且这个问题是出于我对 Java HashMap 实现的内部细节的好奇而提出的 您可以阅读java 文档上Object http docs oracle c
  • 对低设备使用android 6.0 api 23权限(几乎像api 22)

    这是我的第一个问题 也许我会解释得有点糟糕 但好吧 看一下 我有一个使用 api 22 库的项目 但使用 android 6 0 api 23 进行编译 我想继续使用 api 22 库 但是当我使用 android 6 0 设备运行我的项目
  • 迭代最近点实现

    我目前正在使用以下伪代码在 C 中实现 ICP 算法 从 获取ICP 简报 http www math tau ac il dcor Graphics adv slides ICP ppt function ICP Scene Model
  • 简单的 Material UI 对话框示例有不需要的滚动条

    我有一个包含网格的简单 Material UI 对话框 它有一个滚动条 即使屏幕足够大以包含整个内容 也可以滚动几个像素
  • GDB 调试器问题 - 没有命名的源文件

    由于某种原因 我在调试时无法让 gdb 识别项目中的文件 我尝试了各种方法 包括下载不同的版本等 最后我做的就是用 Twilight Dragon Media 的 Bundle Package 完全覆盖所有 MingW 有谁知道如何解决这个
  • 从椭圆生成数组

    我有一个方程 它以一般形式 x 2 a 2 y 2 b 2 1 创建一个椭圆 我希望生成一个数组 其中椭圆内部的所有点都设置为 1 椭圆外部的所有点都设置为 1是零 然后这个数组将与另一个数组进行卷积 到目前为止 我已尝试创建一个大小为空的
  • 存储同步:多次删除,部分失败

    我有一个商店 用户可以使用一个删除多个记录destroy手术 现在 其中一些记录被锁定在数据库中 因为其他人正在处理它们 因此无法删除 服务器如何告诉前端Id为a b c的记录删除成功 但Id为x y z的记录无法删除 应移回存储并显示在网
  • 通过 R 中的方向矩阵进行回溯

    我有一个这样的矩阵 https i stack imgur com mzeRI png https i stack imgur com mzeRI png 你可以像这样加载它 matrix structure c C G C A 0 V V