从R中的字符串中提取分布函数的参数
Extracting parameter of distribution function from string in 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)
有数字的时候能识别,但不知道怎么提取
(该方法必须在参数中的任何值下工作)
谢谢
这是一个使用 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"
如果你真的想正确解析一串 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
我有一个字符串列表,其中包含 "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)
有数字的时候能识别,但不知道怎么提取
(该方法必须在参数中的任何值下工作)
谢谢
这是一个使用 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"
如果你真的想正确解析一串 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