使用 gsub() 意外丢弃字符串结尾
Unexpected dropping of end of string with gsub()
我对以下行为感到困惑。
> tmpString <- Sys.time()
> tmpString
[1] "2021-06-17 11:50:52 EDT"
> gsub(" ", "_", tmpString)
[1] "2021-06-17_11:50:52"
> gsub(" ", "_", tmpString, fixed=TRUE)
[1] "2021-06-17_11:50:52"
为什么tmpString末尾的“EDT”丢失了?
为了完整性,
> R.version
_
platform x86_64-pc-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 3
minor 6.3
year 2020
month 02
day 29
svn rev 77875
language R
version.string R version 3.6.3 (2020-02-29)
nickname Holding the Windsock
>
tmpString
不是字符串。正如评论中提到的,它是一个 POSIXct 对象,它在内部是自 UNIX 纪元以来的秒数,它是 print
函数,用时区显示它。最好将其称为 tmp
而不是 tmpString
,然后显式使用 format
将其转换为字符串。 (下面我们使用 sub
来替换第一个 space,但是如果你想替换两个 space,则使用 gsub
作为问题。)
tmp <- Sys.time()
sub(" ", "_", format(tmp, usetz = TRUE))
## [1] "2021-06-17_12:39:51 EDT"
另请注意 format_ISO8601
的存在,您可能更喜欢它:
format_ISO8601(tmp, usetz = TRUE)
## [1] "2021-06-17T12:39:51-0400"
我对以下行为感到困惑。
> tmpString <- Sys.time()
> tmpString
[1] "2021-06-17 11:50:52 EDT"
> gsub(" ", "_", tmpString)
[1] "2021-06-17_11:50:52"
> gsub(" ", "_", tmpString, fixed=TRUE)
[1] "2021-06-17_11:50:52"
为什么tmpString末尾的“EDT”丢失了?
为了完整性,
> R.version
_
platform x86_64-pc-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 3
minor 6.3
year 2020
month 02
day 29
svn rev 77875
language R
version.string R version 3.6.3 (2020-02-29)
nickname Holding the Windsock
>
tmpString
不是字符串。正如评论中提到的,它是一个 POSIXct 对象,它在内部是自 UNIX 纪元以来的秒数,它是 print
函数,用时区显示它。最好将其称为 tmp
而不是 tmpString
,然后显式使用 format
将其转换为字符串。 (下面我们使用 sub
来替换第一个 space,但是如果你想替换两个 space,则使用 gsub
作为问题。)
tmp <- Sys.time()
sub(" ", "_", format(tmp, usetz = TRUE))
## [1] "2021-06-17_12:39:51 EDT"
另请注意 format_ISO8601
的存在,您可能更喜欢它:
format_ISO8601(tmp, usetz = TRUE)
## [1] "2021-06-17T12:39:51-0400"