>我有一个字符串列表,其中包含诸如"dgamma(x,0.5,0.1("之类的字符 如何识别此字符串上的参数?,换句话说,我如何获得数值 x=0.5 和 y = 0.1?
我试试这个:
pp= "dgamma(x,0.5,0.1)"
large <- nchar(pp)
v = rep(NA, large)
for (i in 1:large) {
v[i] <- substr(pp, start = i, stop = i)
}
grepl("\d", v)
我可以识别何时有数字,但我不知道如何提取
(该方法必须在参数中的任何值下工作(
谢谢
如果确实要正确解析 R 代码字符串,可以使用内置的分析器
expr <- parse(text=pp)[[1]]
然后你可以提取所有参数
as.list(expr)[-1]
# [[1]]
# x
#
# [[2]]
# [1] 0.5
#
# [[3]]
# [1] 0.1
在这种情况下,x
不等于 0.5。这是两个单独的参数。0.5 和 0.1 是具体的形状和速率参数。如果你知道它总是会dgamma
并希望得到你能做的名字
mcall <- match.call(dgamma, expr)
mcall$shape
# [1] 0.5
mcall$rate
# [1] 0.1
以下是使用sub
的一个选项:
x <- "dgamma(x,0.5,0.1)"
sub("[^(]+\([^,]+,\s*(\d+(?:\.\d+)?),\s*\d+(?:\.\d+)?\)", "\1", x)
[1] "0.5"
sub("[^(]+\([^,]+,\s*\d+(?:\.\d+)?,\s*(\d+(?:\.\d+)?)\)", "\1", x)
[1] "0.1"