gpt4 book ai didi

regex - 检查字符值是否是有效的 R 对象名称

转载 作者:行者123 更新时间:2023-12-04 21:53:58 24 4
gpt4 key购买 nike

几个月前我 asked something similar ,但我使用 JavaScript 来检查提供的字符串是否是“有效”的 R 对象名称。现在我想通过只使用 R 来实现相同的目标。我想有一种非常好的方法可以做到这一点,使用一些简洁的(不是那么)深奥的 R 函数,所以正则表达式在我看来是最后一道防线.有任何想法吗?

哦,是的,使用反引号之类的东西被认为是作弊。 =)

最佳答案

编辑 2013-1-9 以修复正则表达式。 之前的正则表达式,取自 John Chambers 的“数据分析软件”第 456 页,(巧妙地)不完整。 (h.t. 哈德利·威克姆)

这里有几个问题。一个简单的正则表达式可用于识别所有语法上有效的名称 --- 但其中一些名称(如 ifwhile )是“保留的”,不能分配给。

  • 识别语法上有效的名称:
    ?make.names 解释了语法上有效的名称:

    [...] consists of letters, numbers and thedot or underline characters and starts with a letter or the dotnot followed by a number. Names such as '".2way"' are not valid [...]


    下面是对应的正则表达式:
     "^((([[:alpha:]]|[.][._[:alpha:]])[._[:alnum:]]*)|[.])$"
  • 识别未保留的语法有效名称
    要识别未保留的名称,您可以利用基本函数 make.names() ,该函数从任意字符串构造语法上有效的名称。
    isValidAndUnreserved <- function(string) {
    make.names(string) == string
    }

    isValidAndUnreserved(".jjj")
    # [1] TRUE
    isValidAndUnreserved(" jjj")
    # [1] FALSE
  • 把它们放在一起
    isValidName <- function(string) {
    grepl("^((([[:alpha:]]|[.][._[:alpha:]])[._[:alnum:]]*)|[.])$", string)
    }

    isValidAndUnreservedName <- function(string) {
    make.names(string) == string
    }

    testValidity <- function(string) {
    valid <- isValidName(string)
    unreserved <- isValidAndUnreservedName(string)
    reserved <- (valid & ! unreserved)
    list("Valid"=valid,
    "Unreserved"=unreserved,
    "Reserved"=reserved)
    }

    testNames <- c("mean", ".j_j", ".", "...", "if", "while", "TRUE", "NULL",
    "_jj", " j", ".2way")
    t(sapply(testNames, testValidity))
          Valid Unreserved Reserved
    mean TRUE TRUE FALSE
    .j_j TRUE TRUE FALSE
    . TRUE TRUE FALSE
    ... TRUE TRUE FALSE
    if TRUE FALSE TRUE
    while TRUE FALSE TRUE
    TRUE TRUE FALSE TRUE
    NULL TRUE FALSE TRUE
    _jj FALSE FALSE FALSE
    j FALSE FALSE FALSE # Note: these tests are for " j", not "j"
    .2way FALSE FALSE FALSE

  • 有关这些问题的更多讨论,请参阅@Hadley 在下面的评论中链接到的 the r-devel thread

    关于regex - 检查字符值是否是有效的 R 对象名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396577/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com