显然,我没有得到grep在R中的工作方式.如果我在OS X终端上使用grep,我可以使用参数-o,这使得grep只返回匹配的部分.在R中,我找不到如何做相应的事情.阅读手册我认为值是正确的方法,这更好,因为它返回字符而不是索引,但仍返回整个字符串.
# some string fasdjlk465öfsdj123
# R
test <- fasdjlk465öfsdj123
grep("[0-9]",test,value=TRUE) # returns "fasdjlk465öfsdj123"
# shell
grep -o '[0-9]' fasdjlk465öfsdj123
# returns 4 6 5 1 2 3
Run Code Online (Sandbox Code Playgroud)
R中缺少的参数是什么?
编辑:Joris Meys的建议非常接近我想要做的事情.我得到一个矢量作为readLines的结果.我想检查向量的每个元素是否有数字并返回这些数字.我真的很惊讶没有标准的解决方案.我想过使用一些可以在字符串上运行的regexp函数并像grep -o一样返回匹配,然后在该向量上使用lapply.grep.custom最接近 - 我会尽力为我工作.
在回答前一个问题时,R中用于调用sed,rsync,ssh等的system()的替代方法:是否存在函数,我应该编写自己的函数,还是我忽略了这一点?,hadley的 回答表明,当遇到类似问题时,他使用了以下功能:
bash <- function() system("bash")
Run Code Online (Sandbox Code Playgroud)
我在他的devtools包中找到了原件; 在devtools/R/bash.R中实现:
#' Open bash shell in package directory.
#'
#' @param pkg package description, can be path or package name. See
#' \code{\link{as.package}} for more information
#' @export
bash <- function(pkg = NULL) {
pkg <- as.package(pkg)
in_dir(pkg$path, system("bash"))
}
Run Code Online (Sandbox Code Playgroud)
我不明白这一点.当我发出
bash <- function() system("bash")
Run Code Online (Sandbox Code Playgroud)
它将我发送到bash shell,之后exit返回R会话,但没有任何bash功能.似乎我可以通过发出以下命令对之一来获得相同的效果(R中的第一个命令,bash中的第二个命令)
system('bash')
exit
Run Code Online (Sandbox Code Playgroud)
要么
q('yes')
R
Run Code Online (Sandbox Code Playgroud)
被攻击的部分是由于我的复制/粘贴错误
我也在bashdevtools包中找不到该函数的任何进一步用法
有人可以帮我理解如何使用这个bash功能; 是否可以在交互式R模式之外的上下文中使用(例如在脚本或函数内)?