【问题标题】:Extracting parameter of distribution function from string in R从R中的字符串中提取分布函数的参数
【发布时间】:2018-06-21 01:02:14
【问题描述】:

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


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      这是一个使用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

      【讨论】:

      • 谢谢,是的,它可以工作,但是当它是整数时我有问题,我知道如何将它调整为任何实数吗?
      • @albert 我编辑了我的答案以允许整数。
      猜你喜欢
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      相关资源
      最近更新 更多