【发布时间】: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 <- 5; y<- 10;yy <- 15;z <- x*(y+yy); sprintf('%s = %s * (%s + %s)', z, x, y, yy)? -
@rawr - 谢谢,这也有效。我更喜欢转换字符串方程的选项。但你回答的是我应该问的问题。我问了一个类似的问题here,但没有太多回应,所以我想我问错了问题。谢谢!