我有这个字符串:

 seed_pattern <- "K?ED??HRDDKDKD?HE?REKE??DE?KKK"

给出另一个字符串

bb_seq <- "rhhhhitv"

我想要做的是通过保持bb_seq的顺序来用bb_seq中的字符替换?,结果是:

?的总长度保证与bb_seq相同.

KrEDhhHRDDKDKDhHEhREKEitDEvKKK

我如何才能用R实现这一点?

我试过了,但失败了:

  seed_pattern <- "K?ED??HRDDKDKD?HE?REKE??DE?KKK"
  bb_seq <- "rhhhhitv"
  sp <- seed_pattern
  gr   <- gregexpr("\\?+", sp)
  csml <- lapply(gr, function(sp) cumsum(attr(sp, "match.length")))
  regmatches(sp, gr) <- lapply(csml, function(sp) substring(bb_seq, c(1, sp[1]), sp))
  sp

  # KrEDrhhHRDDKDKDrhhhHErhhhhREKErhhhhitDErhhhhitvKKK

我对非正则表达式解决方案持开放态度.

推荐答案

您可以在一行程序中做到这一点,只需对您从前面问题中得到的解决方案稍作更改(谢谢@thelatmail):

regmatches(seed_pattern, gregexpr("\\?", seed_pattern)) <- strsplit(bb_seq, "")

判断它是否提供了预期的结果:

seed_pattern == "KrEDhhHRDDKDKDhHEhREKEitDEvKKK"
[1] TRUE

R相关问答推荐

基于现有类创建类的打印方法(即,打印tibles更长时间)

向gggplot 2中的数据和轴标签添加大写和星号

如何对数据集进行逆向工程?

抖动点与嵌套类别变量箱形图的位置不对齐

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

当月份额减go 当月份额

在RStudio中堆叠条形图和折线图

用约翰逊分布进行均值比较

将多个列值转换为二进制

正在导出默认的RStudio主题,还是设置括号 colored颜色 ?

将工作目录子文件夹中的文件批量重命名为顺序

Rmarkdown::Render vs Source()

按镜像列值自定义行顺序

R:使用ApexCharge更改标签在饼图中的位置

从字符串01JAN2021创建日期

从字符串列中的向量中查找第一个匹配的单词

如何将两个用不同的运算符替换*的矩阵相乘

如何从矩阵绘制环弦图

使用API密钥进行身份验证的Posit Connect上Plumber API中的RSTUDIO_USER_IDENTITY