【问题标题】:Split string on [:punct:] except for underscore in R在 [:punct:] 上拆分字符串,R 中的下划线除外
【发布时间】:2015-06-19 19:36:26
【问题描述】:

我有一个方程作为字符串,其中字符串方程中的变量是 R 工作区中的变量。我想用 R 工作区中的数值替换每个变量。当变量名不包含标点符号时,这很容易。

这是一个简单的例子。

x <- 5
y <- 10
yy <- 15
z <- x*(y + yy)
zAsChar <- "z=x*(y+yy)"
vars <- unlist(strsplit(zAsChar, "[[:punct:]]"))
notVars <- unlist(strsplit(zAsChar, "[^[:punct:]]"))
varsValues <- sapply(vars[vars != ""], FUN=function(aaa) get(aaa))
notVarsValues <- notVars[notVars != ""]
paste(paste0(varsValues, notVarsValues), collapse="")

这会产生"125=5*(10+15)",这很棒。

但是,我喜欢在变量名中使用下划线的选项,这样我就可以对变量名使用“下标”。我在 R markdown 的数学模式中使用这些字符串。

所以我需要一个不包括_[:punct:]。我尝试使用[\\+\\-\\*\\/\\(\\)\\=] 而不是[:punct:],但使用这种方法我无法拆分减号。有没有办法保留_

【问题讨论】:

  • x &lt;- 5; y&lt;- 10;yy &lt;- 15;z &lt;- x*(y+yy); sprintf('%s = %s * (%s + %s)', z, x, y, yy)?
  • @rawr - 谢谢,这也有效。我更喜欢转换字符串方程的选项。但你回答的是我应该问的问题。我问了一个类似的问题here,但没有太多回应,所以我想我问错了问题。谢谢!

标签: regex r math strsplit


【解决方案1】:

使用 unicode 字符类 \pP 而不是 [:punct:] \p{P} 的快捷方式) 及其否定 \PP 来做到这一点:

[^\\PP_]

(它适用于perl=TRUE 选项)

【讨论】:

  • 这是否应该包括+-=?我仍然不确定如何使用它。
【解决方案2】:

您确定需要进行所有这些字符串操作吗? substitute() 功能可以帮到你

substitute(z==x*(y+yy), list(x=x, y=y, yy=yy,z=z))

或者如果你真的需要从一个字符值开始

do.call("substitute", list(parse(text=zAsChar)[[1]],list(x=x, y=y, yy=yy,z=z)))
# 125 = 5 * (10 + 15)

您可以deparse() 将结果转回字符。

【讨论】:

  • 谢谢!这是我应该问的问题。
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2016-04-23
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多