我有一个字符串列表,其中包含诸如“ 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)
我可以确定何时有数字,但我不知道如何提取
(该方法必须在参数中的任何值下均可工作)
谢谢
答案 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"