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

时间:2018-06-21 01:02:14

标签: r string character gsub

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

我可以确定何时有数字,但我不知道如何提取

(该方法必须在参数中的任何值下均可工作)

谢谢

2 个答案:

答案 0 :(得分:3)

如果您确实要正确解析R代码字符串,则可以使用内置的解析器

y=3
id(3)  # 1445555280
id(y)  # 1445555280
y=3.1
id(3.1) # 132653722264
id(y)   # 132653720656

然后您可以使用提取所有参数

expr <- parse(text=pp)[[1]]

在这种情况下,as.list(expr)[-1] # [[1]] # x # # [[2]] # [1] 0.5 # # [[3]] # [1] 0.1 不等于0.5。这些是两个单独的参数。 0.5和0.1具体是形状和速率参数。如果您知道它永远都是x,并希望获得您可以做的名字

dgamma

答案 1 :(得分:0)

以下是使用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"

Demo