我最近一直在gsub广泛使用,我注意到短模式比长模式运行得更快,这并不奇怪.这是一个完全可重现的代码:
library(microbenchmark)
set.seed(12345)
n = 0
rpt = seq(20, 1461, 20)
msecFF = numeric(length(rpt))
msecFT = numeric(length(rpt))
inp = rep("aaaaaaaaaa",15000)
for (i in rpt) {
n = n + 1
print(n)
patt = paste(rep("a", rpt[n]), collapse = "")
#time = microbenchmark(func(count[1:10000,12], patt, "b"), times = 10)
timeFF = microbenchmark(gsub(patt, "b", inp, fixed=F), times = 10)
msecFF[n] = mean(timeFF$time)/1000000.
timeFT = microbenchmark(gsub(patt, "b", inp, fixed=T), times = 10)
msecFT[n] = mean(timeFT$time)/1000000.
}
library(ggplot2)
library(grid)
library(gridExtra)
axis(1,at=seq(0,1000,200),labels=T)
p1 = qplot(rpt, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在R-Studio中安装'yaml'和'stringi'软件包,它不断给我这些错误:
> install.packages("stringi")
Package which is only available in source form, and may need compilation of C/C++/Fortran: ‘stringi’
These will not be installed
Run Code Online (Sandbox Code Playgroud)
要么
> install.packages('yaml')
Package which is only available in source form, and may need compilation of C/C++/Fortran: ‘yaml’
These will not be installed
Run Code Online (Sandbox Code Playgroud)
如何正确安装这些?
我看到了这个问题的一个版本,但仍然没有看到答案.我正在尝试使用ggplot2但是得到以下错误(今天早上使用R3.0.2'frisbee sailing'与RStudio版本0.98.1102一切正常.
我更新了R和Rstudio,现在得到以下内容:
library(ggplot)
Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
there is no package called ‘stringi’
Error: package or namespace load failed for ‘ggplot2’
Run Code Online (Sandbox Code Playgroud)
我很自然地尝试过:
> install.packages('stringi')
**There is a binary version available but the source version is later:
binary source needs_compilation
stringi 0.4-1 0.5-2 FALSE**
installing the source package ‘stringi’
trying URL 'http://cran.rstudio.com/src/contrib/stringi_0.5-2.tar.gz'
Content type 'application/x-gzip' length 3641292 bytes (3.5 MB)
==================================================
downloaded 3.5 MB
* installing *source* package ‘stringi’ ...
** …Run Code Online (Sandbox Code Playgroud) 我有以下字符串:
strings <- c("ABBSDGNHNGA", "AABSDGDRY", "AGNAFG", "GGGDSRTYHG")
Run Code Online (Sandbox Code Playgroud)
我想切断字符串,一旦A,G和N的出现次数达到一定值,比如说3.在这种情况下,结果应该是:
some_function(strings)
c("ABBSDGN", "AABSDG", "AGN", "GGG")
Run Code Online (Sandbox Code Playgroud)
我试图用stringi,stringr和正则表达式的表达式,但我无法弄清楚.
我正在尝试从字符串向量中删除非字母字符.我认为[:punct:]分组会覆盖它,但它似乎忽略了+.这属于另一组角色吗?
library(stringi)
string1 <- c(
"this is a test"
,"this, is also a test"
,"this is the final. test"
,"this is the final + test!"
)
string1 <- stri_replace_all_regex(string1, '[:punct:]', ' ')
string1 <- stri_replace_all_regex(string1, '\\+', ' ')
Run Code Online (Sandbox Code Playgroud) 我已经搜索过并且能够找到此论坛讨论以实现重叠匹配的效果.
我还发现了以下SO问题,即找到索引来执行此任务,但是无法找到任何关于在R语言中抓取重叠匹配的简洁信息.
我可以在支持(PCRE)的大多数语言中通过使用正向前端断言执行此任务,同时在先行内部实现捕获组以捕获重叠的匹配.
但是,虽然实际执行此操作的方式与其他语言相同,但perl=T在R中使用时,结果不会产生.
> x <- 'ACCACCACCAC'
> regmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
使用stringi和stringr包都是一样的.
> library(stringi)
> library(stringr)
> stri_extract_all_regex(x, '(?=([AC]C))')[[1]]
[1] "" "" "" "" "" "" ""
> str_extract_all(x, perl('(?=([AC]C))'))[[1]]
[1] "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)
执行此操作时应返回的正确结果是:
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
Run Code Online (Sandbox Code Playgroud)
我很清楚,regmatches对于捕获的匹配不能很好地工作,但是在regmatches中究竟是什么导致了这种行为?为什么没有返回结果?我正在寻找一个有点详细的答案.
是stringi和 …
我正在使用RStudio在远程服务器上工作.此服务器无法访问Internet.我想安装包"stringi".我看过这个s tackoverflow文章,但每当我使用该命令时
install.packages("stringi_0.5-5.tar.gz",
configure.vars="ICUDT_DIR=/my/directory/for/icudt.zip")
Run Code Online (Sandbox Code Playgroud)
它只是试图访问互联网,这是它无法做到的.到目前为止,我一直在使用工具 - >安装包 - >从打包存档文件安装.但是,由于此错误,我无法再使用此方法.
我该如何安装这个包?
我想打破下string一句话:
library(NLP) # NLP_0.1-7
string <- as.String("Mr. Brown comes. He says hello. i give him coffee.")
Run Code Online (Sandbox Code Playgroud)
我想展示两种不同的方式.一个来自包装openNLP:
library(openNLP) # openNLP_0.2-5
sentence_token_annotator <- Maxent_Sent_Token_Annotator(language = "en")
boundaries_sentences<-annotate(string, sentence_token_annotator)
string[boundaries_sentences]
[1] "Mr. Brown comes." "He says hello." "i give him coffee."
Run Code Online (Sandbox Code Playgroud)
第二个来自包装stringi:
library(stringi) # stringi_0.5-5
stri_split_boundaries( string , opts_brkiter=stri_opts_brkiter('sentence'))
[[1]]
[1] "Mr. " "Brown comes. "
[3] "He says hello. i give him coffee."
Run Code Online (Sandbox Code Playgroud)
在第二种方式之后,我需要准备句子以删除多余的空格或再次将新的字符串分解成句子.我可以调整stringi函数来提高结果的质量吗?
当它是一个大数据时,openNLP(非常)慢stringi.
有没有办法结合stringi( - >快速)和openNLP …
我正在尝试使用stringi包拆分分隔符(可能重复分隔符)但保留分隔符.这类似于我问moons前的这个问题:R分割分隔符(split)保留分隔符(split)但分隔符可以重复.我不认为base strsplit可以处理这种类型的正则表达式.该stringi包可以,但我无法弄清楚如何将它分割的分隔符,如果有重复,也不要在字符串的结尾留下一个空字符串格式的正则表达式.
基本R解决方案,stringr,stringi等解决方案都受到欢迎.
后来的问题发生是因为我使用贪婪*,\\s但空间不是空间,所以我只能考虑将其留在:
MWE
text.var <- c("I want to split here.But also||Why?",
"See! Split at end but no empty.",
"a third string. It has two sentences"
)
library(stringi)
stri_split_regex(text.var, "(?<=([?.!|]{1,10}))\\s*")
Run Code Online (Sandbox Code Playgroud)
#结果
## [[1]]
## [1] "I want to split here." "But also|" "|" "Why?"
## [5] ""
##
## [[2]]
## [1] "See!" "Split at end but no empty." ""
##
## [[3]]
## [1] "a third string." …Run Code Online (Sandbox Code Playgroud) 我们在生产环境中使一些R代码工作时感到笨拙,作为其中的一部分,我们正在安装一些R包,如下所示:
# Default directories and mirrors
WORKING_DIR <- "/srv/foo/bar/baz"
LIB_DIR <- paste( WORKING_DIR, "libs", sep="/" )
setwd(WORKING_DIR)
stringi.loc <- paste( WORKING_DIR, "stringi_0.4-1.tar.gz", sep="/" )
Run Code Online (Sandbox Code Playgroud)
这可能不是安装R软件包最优雅的方式,但它似乎对我们没用(任何其他关于R软件包管理的提示都会受到欢迎,但在这个阶段有点迟了:).
但是,stringi包似乎依赖于icu52l包,它通过网络安装:
checking for R... /usr/lib64/R/bin/R
checking for gcc... gcc -std=gnu99
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes …Run Code Online (Sandbox Code Playgroud)