我正在尝试从R字符串中删除一个括号,并遇到以下错误:
string <- "log(M)"
gsub("log", "", string) # Works just fine
gsub("log(", "", string) #breaks
# Error in gsub("log(", "", test) :
# invalid regular expression 'log(', reason 'Missing ')''
Ben的答案提供了通常适用的好方法。
或者,根据您的情况,您可以使用fixed=TRUE
参数,像这样:
gsub("log(", "", string, fixed=TRUE)
# [1] "M)"
当gsub()
的pattern
参数是包含你要搜索的字符序列的字符串时,这种方法是合适的。这样做的好处是可以直接输入你要搜索的精确模式,而无需进行转义等处理。
如果你不是一个正则表达式专家(我们中的很多人都不是!),我认为更直接的方法是将移除不需要的文本和括号分开,前提是你的查询支持它。
问题似乎只想要移除括号,所以你可以使用:
gsub(paste(c("[(]", "[)]"), collapse = "|"), "", string)
gsub(paste(c("M", "[(]", "[)]"), collapse = "|"), "", string)
这将导致结果为“log”
fixed=TRUE
,但fixed="TRUE"
、fixed="true"
和fixed="True"
也都可以工作。其他的组合,如fixed="TRue"
或fixed="TruE"
不行。相关地(?)我最近意识到rnorm("9")
(例如)也可以工作,尽管我认为它不应该能工作。(顺便说一下,rnorm("9", "1")
不能 工作。)我想知道这些情况是否与底层 C 代码处理传递给它的参数的方式有关。你怎么看? - Josh O'Brien?as.logical
中:'as.logical' 试图将其参数强制转换为逻辑类型。对于 'factor',这使用 'levels'(标签)。与 'as.vector' 一样,它会剥离属性,包括名称。 字符串 'c(“T”,“TRUE”,“True”,“true”)' 被视为 true,'c(“F”,“FALSE”,“False”,“false”)' 被视为 false,所有其他情况均为 'NA'。
- Ben Bolkerrnorm("9")
情况下是否存在某种相关/类似的转换,以及它是否仅在第一个参数中发生,因为它是没有默认值的参数。刚刚检查了seq_len("9")
(因为它是我想到的第一个.Primitive
函数),它显示出了类似的行为... - Josh O'Brien