我想计算一个字符串中的字符数(不包括空格),我想知道我的方法是否可以改进。
假设我有:
x <- "hello to you"
我知道nchar()
会给我一个字符串中的字符数(包括空格):
> nchar(x)
[1] 12
但我想返回以下内容(不包括空格):
[1] 10
为此,我做了以下事情:
> nchar(gsub(" ", "",x))
[1] 10
我担心的是gsub()
需要很长时间才能完成许多字符串。这是接近这个的正确方法,还是有一种nchar'esque函数会返回字符数而不计算空格?
提前致谢。
答案 0 :(得分:7)
以理查德的评论为基础,&#34; stringi&#34;这将是一个很好的考虑因素:
方法可以是计算整个字符串长度并减去空格数。
比较以下内容。
library(stringi)
library(microbenchmark)
x <- "hello to you"
x
# [1] "hello to you"
fun1 <- function(x) stri_length(x) - stri_count_fixed(x, " ")
fun2 <- function(x) nchar(gsub(" ", "",x))
y <- paste(as.vector(replicate(1000000, x, TRUE)), collapse = " ")
microbenchmark(fun1(x), fun2(x))
# Unit: microseconds
# expr min lq mean median uq max neval
# fun1(x) 5.560 5.988 8.65163 7.270 8.1255 44.047 100
# fun2(x) 9.408 9.837 12.84670 10.691 12.4020 57.732 100
microbenchmark(fun1(y), fun2(y), times = 10)
# Unit: milliseconds
# expr min lq mean median uq max neval
# fun1(y) 68.22904 68.50273 69.6419 68.63914 70.47284 75.17682 10
# fun2(y) 2009.14710 2011.05178 2042.8123 2030.10502 2079.87224 2090.09142 10
答案 1 :(得分:2)
确实,stringi
似乎最合适。试试这个:
library(stringi)
x <- "hello to you"
stri_stats_latex(x)
结果:
CharsWord CharsCmdEnvir CharsWhite Words Cmds Envirs
10 0 2 3 0 0
如果在变量中需要它,可以通过常规[i]访问参数,例如:
stri_stats_latex(x)[1]