从R中的字符串中提取分布函数的参数



>我有一个字符串列表,其中包含诸如"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"

演示

最新更新