【问题标题】:r: lapply value assignmentr: lapply 赋值
【发布时间】:2017-10-03 12:52:46
【问题描述】:

我想用 x 替换以下向量中每个字符串的第二个字母。

ba <- c('ba','aba','baba')
# goal: bx, axa, bxba

通常我只会使用substr(ba,2,2) &lt;- 'x'。但由于过于复杂而无法进入此处的原因,我试图避免substr,而是寻找另一种解决方案。所以我尝试拆分字符串并替换每个列表的第二个元素。但我收到此错误消息。

ba2 <- strsplit(ba,'')
lapply(ba2,function(x) x[2]) <- 'x'
# Error in lapply(ba2, function(x) x[2]) <- "x" : 
# could not find function "lapply<-"

我该如何解决这个问题?有没有办法将lapply&lt;- 结合使用?

【问题讨论】:

  • sub 更好。对于lapply / strsplit 方法,您可以使用sapply(lapply(strsplit(ba, ""), function(x) {x[2] &lt;- "x"; x}), paste, collapse="")sapply(strsplit(ba, ""), function(x) {x[2] &lt;- "x"; paste(x, collapse="")})
  • substr 而不是substr&lt;- 的另一种选择是paste0(substr(ba, 1, 1), "x", substr(ba, 3, 100))
  • 谢谢谢谢谢谢!我不知道您可以在sapply 中嵌入两个以; 分隔的命令。这非常有效。

标签: r variable-assignment lapply


【解决方案1】:

使用正则表达式替换:

sub("^(.).", "\\1x", ba)

解释:

  • ^ - 词首
  • (.) - 取任意字符并记住它
  • 。另一个任意字符
  • \1 - 替换为记忆的字符
  • ...和'x'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多