如何在R中使用带有'substitute'函数的可变字符串
How to use variable character strings with 'substitute' function in R
我需要能够用未知数量的变量值填充表达式。表达式的形状取决于变量的数量。
示例:
表达式 1: "italic(y)==a*italic(x)*b"
变成: "y=1.2 x+4.3
表达式 2: "italic(y)==a*italic(x)*b~c"
变成: "y=1.2 x+4.3 -5.3
目前我正在使用 substitute 函数,但它不能与 expression
函数一起使用:
substitute(expression("italic(y)==a*italic(x)*b"),list(a=1.23,b=2.3))
我的表达式需要随着变量数量(即列表长度)的增加而增加。因此,下一步是添加变量 c:
substitute(expression("space1*italic(y)==a*italic(x)*b*c"),list(a=1.23,b=2.3,c=3.2))
但我需要在没有任何人工干预的情况下更改代码中的表达式,并且这些代码不会从列表中读取变量值,除非我将其更改为这个(其中表达式不再可扩展,因为它不是一个字符串):
substitute(italic(y)==a*italic(x)*b*c,list(a=1.23,b=2.3,c=3.2))
我该怎么做?
这是一个脚本,可能符合您的要求。我们可以使用 for
循环迭代替换列表,然后用列表中的相应值对表达式中的占位符进行正则表达式替换。
lst <- list(a=1.23,b=2.3)
expression <- "italic(y)==a*italic(x)*b"
for (name in names(lst)) {
expression <- gsub(paste0("\b", name, "\b"), lst[[name]], expression)
}
print(expression)
[1] "italic(y)==1.23*italic(x)*2.3"
注意,我搜索的是两边被单词边界包围的变量名。如果你的占位符被其他单词字符包围,那么我的解决方案就会失败,我们需要更改替换逻辑。
我需要能够用未知数量的变量值填充表达式。表达式的形状取决于变量的数量。
示例:
表达式 1: "italic(y)==a*italic(x)*b"
变成: "y=1.2 x+4.3
表达式 2: "italic(y)==a*italic(x)*b~c"
变成: "y=1.2 x+4.3 -5.3
目前我正在使用 substitute 函数,但它不能与 expression
函数一起使用:
substitute(expression("italic(y)==a*italic(x)*b"),list(a=1.23,b=2.3))
我的表达式需要随着变量数量(即列表长度)的增加而增加。因此,下一步是添加变量 c:
substitute(expression("space1*italic(y)==a*italic(x)*b*c"),list(a=1.23,b=2.3,c=3.2))
但我需要在没有任何人工干预的情况下更改代码中的表达式,并且这些代码不会从列表中读取变量值,除非我将其更改为这个(其中表达式不再可扩展,因为它不是一个字符串):
substitute(italic(y)==a*italic(x)*b*c,list(a=1.23,b=2.3,c=3.2))
我该怎么做?
这是一个脚本,可能符合您的要求。我们可以使用 for
循环迭代替换列表,然后用列表中的相应值对表达式中的占位符进行正则表达式替换。
lst <- list(a=1.23,b=2.3)
expression <- "italic(y)==a*italic(x)*b"
for (name in names(lst)) {
expression <- gsub(paste0("\b", name, "\b"), lst[[name]], expression)
}
print(expression)
[1] "italic(y)==1.23*italic(x)*2.3"
注意,我搜索的是两边被单词边界包围的变量名。如果你的占位符被其他单词字符包围,那么我的解决方案就会失败,我们需要更改替换逻辑。