避免字符串替换中的 for 循环?

2024-03-04

我有数据、一个字符向量(最终我会折叠它,所以我不在乎它是否仍然是一个向量或是否被视为单个字符串)、一个模式向量和一个替换向量。我希望数据中的每个模式都被其各自的替换所替换。我用一个完成了stringr和一个 for 循环,但是有没有更类似于 R 的方法来做到这一点?

require(stringr)
start_string <- sample(letters[1:10], 10)
my_pattern <- c("a", "b", "c", "z")
my_replacement <- c("[this was an a]", "[this was a b]", "[this was a c]", "[no z!]")
str_replace(start_string, pattern = my_pattern, replacement = my_replacement)
# bad lengths, doesn't work

str_replace(paste0(start_string, collapse = ""),
    pattern = my_pattern, replacement = my_replacement)
# vector output, not what I want in this case

my_result <- start_string
for (i in 1:length(my_pattern)) {
    my_result <- str_replace(my_result,
        pattern = my_pattern[i], replacement = my_replacement[i])
}
> my_result
 [1] "[this was a c]"  "[this was an a]" "e"               "g"               "h"               "[this was a b]" 
 [7] "d"               "j"               "f"               "i"   

# This is what I want, but is there a better way?

就我而言,我知道每种模式最多会出现一次,但并非每种模式都会出现。我知道我可以使用str_replace_all模式是否可能出现多次;我希望解决方案也能提供这种选择。我还想要一个使用的解决方案my_pattern and my_replacement这样它就可以成为以这些向量作为参数的函数的一部分。


我敢打赌还有另一种方法可以做到这一点,但我的第一个想法是gsubfn:

my_repl <- function(x){
    switch(x,a = "[this was an a]",
             b = "[this was a b]",
             c = "[this was a c]",
             z = "[this was a z]")
}

library(gsubfn)    
start_string <- sample(letters[1:10], 10)
gsubfn("a|b|c|z",my_repl,x = start_string)

如果您正在搜索列表元素的可接受的有效名称的模式,这也将起作用:

names(my_replacement) <- my_pattern
gsubfn("a|b|c|z",as.list(my_replacement),start_string)

Edit

但坦率地说,如果我真的必须在自己的代码中经常这样做,我可能会这样做for循环事物,包装在函数中。这是一个简单的版本,使用sub and gsub而不是来自的函数stringr:

vsub <- function(pattern,replacement,x,all = TRUE,...){
  FUN <- if (all) gsub else sub
  for (i in seq_len(min(length(pattern),length(replacement)))){
    x <- FUN(pattern = pattern[i],replacement = replacement[i],x,...)
  }
  x
}

vsub(my_pattern,my_replacement,start_string)

但当然,没有众所周知的内置函数的原因之一可能是像这样的顺序替换不会非常脆弱,因为它们是如此依赖于顺序:

vsub(rev(my_pattern),rev(my_replacement),start_string)
 [1] "i"                                          "[this w[this was an a]s [this was an a] c]"
 [3] "[this was an a]"                            "g"                                         
 [5] "j"                                          "d"                                         
 [7] "f"                                          "[this w[this was an a]s [this was an a] b]"
 [9] "h"                                          "e"      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免字符串替换中的 for 循环? 的相关文章

  • lmer(来自 R 包 lme4)如何计算对数似然?

    我试图理解 lmer 函数 我发现了很多关于如何使用该命令的信息 但关于它实际执行的操作的信息却很少 除了这里的一些神秘注释 http www bioconductor org help course materials 2008 PHSI
  • 修复 ggplot 中构面中的数据顺序

    我在使用 ggplot 绘制数据时遇到问题 我无法使每个方面内的数据正确排序 我的样本数据是 data lt structure list Parameter c 0 1 0 7 0 0 0 2 0 2 0 7 0 0 0 1 0 3 0
  • R Data.Table 创建带有条件的变量

    我需要在下面的数据集中创建一个新变量 A X a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 The newvar如果X等于 2 5 7 或 9 否则 newvar应该是 0 Code dt1 lt dat
  • 根据不平凡的标准有效合并两个数据帧

    正在接听这个问题 https stackoverflow com questions 18821862 data selection error 18823432 18823432昨晚 我花了一个小时试图找到一个没有增长的解决方案data
  • 循环中的knitr模板和子文档

    圣诞节前我之前问过跨多个 knitr 文档的单一样式表 https stackoverflow com questions 20370584 single style sheet across multiple knitr document
  • read.table 和 read.delim 函数之间的区别

    两者有什么区别read table and read delim R语言中的函数 当您不确定函数的作用时 除了阅读帮助页面之外 您还可以检查函数的实际代码 例如 输入read delim显示该函数包含以下代码 gt read delim f
  • 优化 R 中的嵌套 for 循环

    我尝试加速下面的代码 但没有成功 我读到Rfast https cran r project org web packages Rfast Rfast pdf包 但我也未能实现该包 有没有办法优化R中的以下代码 RI lt function
  • 使用 stargazer 分析包含时间序列的数据帧

    我有一个面板数据集共 10 个观测值和 3 个变量 观测值 30 的数量 10 行 国家 地区 2 列 迁移参数 相应年份的 1 列 可以这么说 我的数据框由 3 个年度数据框组成 我该如何申请观星者考虑到它是一个面板数据集 所以最大 N
  • 分组和计数以获得接近值

    我想计算每country的次数status is open以及次数status is closed 然后计算closerate per country Data customer lt c 1 2 3 4 5 6 7 8 9 country
  • 抑制 R 中的错​​误消息

    我正在 R 中运行模拟研究 有时 我的模拟研究会产生错误消息 当我在函数中实现模拟研究时 当出现此错误消息时模拟停止 我知道抑制错误是不好的做法 但此时对我来说 除了抑制错误然后继续下一个模拟 直到达到我喜欢运行的模拟总数为止 没有其他选择
  • 有没有一种简单的方法可以根据多个标准进行排名,从而保留 R 中的联系?

    当单个标准排序良好时 rank 函数会返回明显的结果 rank c 2 4 1 3 5 1 2 4 1 3 5 当单个标准具有联系时 排名函数 默认情况下 将平均排名分配给联系 rank c 2 4 1 1 5 1 3 0 4 0 1 5
  • kmeans 对分组数据进行聚类

    目前 我尝试在分组数据中找到簇的中心 通过使用示例数据集和问题定义 我能够创建kmeans每个组内的集群 然而 当涉及到给定组的集群的每个中心时 我不知道如何获取它们 https rdrr io cran broom man kmeans
  • warnings() 在函数内不起作用?如何解决这个问题?

    op lt options warn 0 although doesn t work for any value of warn assign last warning NULL envir baseenv thisDoesntWork l
  • 在 mutate 和 across 之后使用 ~separate

    目的是将所有物种 setosa 行转换为一行 setosa 这是一个最小的示例 实际上有更多列和更多组 我有这个数据框 head iris 2 gt select 1 2 5 gt group by Species Sepal Length
  • 连接多个用户的 R 闪亮会话

    最小可重现示例 library shiny ui lt fluidPage actionButton button1 Run 1 actionButton button2 Run 2 server lt function session i
  • R texreg:如何选择要显示的 gof 统计信息?

    我正在使用 texreg 通过 plm 生成面板回归的输出表 我想抑制所有 gof 统计数据的输出 这不是显示 R2 adj R2 和 N 我只想显示 adj R2 有谁知道一个简单的方法来做到这一点 好吧 这实际上很简单 只需在调用中包含
  • R:如何找到向量的模式[重复]

    这个问题在这里已经有答案了 下面是我的data frame我想知道每个内存类别 1 到 8 的模式是什么 gt dput d structure list MEMORY1 c 5 5 7 1 5 6 4 5 4 5 5 4 1 5 5 2
  • R闪亮主面板显示样式和字体

    我正在学习闪亮的应用程序 并且有一些关于调整布局的基本问题 特别是样式和字体 希望得到指点或明确的答案 谢谢 考虑一个基本的输入输出应用程序 用户在 sidebarPanel 中输入数据 然后在 mainPanel 中反应性地输出结果 如何
  • R data.table 连接不等式条件

    我想使用 data table 包根据多个不等式条件对数据进行子集化 data table 手册中的示例展示了如何使用字符变量执行此操作 但不显示数字不等式 我还了解了如何使用子集函数来执行此操作 但我真的很想利用 data table 二
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac

随机推荐

  • Flutter 堆栈大小到同级

    有没有办法自动将堆栈子级的大小调整为其最大的兄弟级 IE 如果我有一个Stack with a ListTile and a Container最上面 我如何确保Container覆盖整个ListTile 例子 new Stack chil
  • 如何返回静态数组指针

    我正在尝试创建一个函数来创建具有默认值的二维数组 然后 该函数应该返回该静态数组的指针 int novoTabuleiro static int novoTabuleiro LINHAS COLUNAS Some changes retur
  • 动态添加组件到Wicket中的ListView

    我想制作一个带有 添加 按钮的表单 按 添加 按钮后 新面板将添加到检票口 ListView 元素 我怎么做 我希望能够添加无限数量的行 EDIT 交互式面板页面 html table tr td a href Add Panel a td
  • 即使不进行任何更改也无法快进

    我最终陷入了一个奇怪的 git 状态 我想从服务器拉取 仅快进 然而 即使没有任何变化 git 仍然告诉我 不可能快进 git pull v ff only From github com username repo up to date
  • CSS 句子首字母大写

    我想将句子的第一个字母大写 如果可能的话 也将逗号后面的第一个字母大写 我想在这里添加代码 qcont width 550px height auto float right overflow hidden position relativ
  • dcm4che 查询/检索 SCP

    首先 我是 dcm4che 的新手 没有良好的文档很难开始 因此请原谅我的无知 我必须开发一个查询 检索 SCP 并且我需要知道 doCFind 函数中由 SCU 输入的查询参数 例子 SCU 执行以下操作 dcmqr MYQR local
  • 如何撤消/恢复“npm 审核修复”

    正如标题所说 我跑了npm audit fix在命令中 现在我跑不了了npm run build因为它给了我错误 如何撤消npm audit fix 有这样的命令吗 运行后npm audit fix我收到此错误 D SUBLIME REAC
  • 如何将数据表转换为通用列表?

    目前 我正在使用 DataTable dt CreateDataTableInSomeWay List
  • Math.Abs​​(x) < double.Epsilon 是否等于 Math.Abs​​(x) == 0d?

    经过一番轻松阅读后 本文 http msdn microsoft com en us library system double epsilon 28v vs 110 29 aspx引起了我的兴趣 我本以为是的 根据 MSDN 的声明 这两
  • 如何在 Box2D 中设置形状/夹具/主体的中心

    嘿 我正在尝试集成 SFML 和 Box2D SFML 使精灵 形状等的设置中心变得非常容易 另一方面 Box2D 我遇到了麻烦 因为我不知道如何设置甚至找到形状或夹具的中心 在我看来 当手动添加顶点到 b2 PolygonShape 时
  • Bootstrap 工具提示 - 单击另一个工具提示时隐藏

    我希望有人能帮帮忙 我试图在单击另一个工具提示图标时隐藏工具提示 它有效 但是当我决定再次单击最后一个工具提示时 它会 闪烁 工具提示 var Hastooltip hastooltip HasTooltip on click functi
  • 从 Gradle 调用 Ant 任务时如何拦截或提升日志消息

    我从 gradle 脚本中调用 ant signjar 我怎样才能捕获它的输出 我既没有轻松管理它以将 INFO 的输出提升到另一个级别 也没有拦截或将错误警告的输出包装到 WARN 级别 目前 signjar 回显证书即将过期 但这并没有
  • 在剑道网格中,我可以使用函数动态设置列属性吗?

    我这里有一些代码 我试图根据数据项的值设置单元格的背景颜色 http dojo telerik com solidus flux eHaMu http dojo telerik com solidus flux eHaMu
  • jQuery 验证插件:如何验证下拉列表

    我正在尝试使用 jQuery Validate 插件来验证下拉列表 它正确验证了我表单的其余部分 但它不适用于下拉菜单 这是我的 jQuery campaignForm validate rules campaign name requir
  • 内容通过固定标头传递

    在我的 html 页面中 我用以下内容修复了标题 position fixed 当我向下滚动时 页面的内容会越过标题 我怎样才能解决这个问题 假设您的 HTML 如下 div div div div 尝试以下 CSS
  • 如何使用类型特征使数组到指针的转换明确?

    我想区分静态数组和指针 以下示例由于以下原因无法编译具有精确匹配的数组到指针转换 使两者foo的可能候选人 我能获得第二次超载吗foo使用类型特征明确选择 include
  • 静态编译libmagic(c/c++文件类型检测)

    感谢那些帮助我的人上一个问题 https stackoverflow com questions 2105816 trying to use include compile 3rd party library libmagic c c fi
  • 在 REST API 调用之前 OPTIONS 调用元

    我试图了解这个系统是如何在幕后工作的 该系统是REST基于这是相当标准的 我不明白客户做了什么OPTIONS在每次 API 调用之前调用 并以该格式返回 XML 内容 它使用 Jersey Java OPTIONS的回应DELETE met
  • System.Web.Mvc.HandleErrorInfo 模型类型错误

    我创建了正确的模型类型 但不明白它来自哪里 有任何想法吗 System InvalidOperationException The model item passed into the dictionary is of type Syste
  • 避免字符串替换中的 for 循环?

    我有数据 一个字符向量 最终我会折叠它 所以我不在乎它是否仍然是一个向量或是否被视为单个字符串 一个模式向量和一个替换向量 我希望数据中的每个模式都被其各自的替换所替换 我用一个完成了stringr和一个 for 循环 但是有没有更类似于