我需要将som数据导出到另一种编程语言的文本文件中,其中数字不能超过14位。并非所有元素都需要以逗号分隔,因此这就是我使用此方法的原因。
问题是gsub
在强制转换为字符串时没有重新计算数字42,科学记数法选项scipen
设置得足够低,因此42用电子记数法打印。
此处scipen=-10
所以42以电子记数法打印。
x <- 4.2e+1 # The meaning of life
options(scipen = -10)
gsub(pattern=x,replacement=paste(",",x),x,useBytes=TRUE)
[1] "4.2e+01"
gsub(pattern=x,replacement=paste(",",x),x,useBytes=FALSE)
[1] "4.2e+01"
就像gsub不会重新匹配。我也试过了,
gsub(pattern=x,replacement=paste(",",x),as.character(x))
但没有运气。
在以下两个示例gsub
按预期行事,scipen=0
足够高,可确保将42打印为42
。
x <- 4.2e+1 # Still the meaning of life
options(scipen = 0)
gsub(pattern=x,replacement=paste(",",x),x,useBytes=TRUE)
[1] ", 42"
gsub(pattern=x,replacement=paste(",",x),x,useBytes=FALSE)
[1] ", 42"
正如您所看到的,useBytes
选项也没有帮助。有人可以告诉我我没有得到的东西。
感谢。
答案 0 :(得分:0)
字符.
和+
是预定义的正则表达式字符。因此,它们不是按字面解释的。您必须在模式中转义这些字符(使用\\
)。然后,它会工作。
x <- 4.2e+1 # The meaning of life
options(scipen = -10)
x_pat <- gsub("(\\+|\\.)", "\\\\\\1", x)
# [1] "4\\.2e\\+01"
gsub(x_pat, paste(",", x), x)
# [1] ", 4.2e+01"
另一种可能性是使用参数fixed = TRUE
。这与模式字符串匹配。
gsub(x, paste(",", x), x, fixed = TRUE)
# [1] ", 4.2e+01"