0
word <- c('abc [email protected]','text with no email','first [email protected] also [email protected]')
pattern <- '[-A-Za-z0-9_.%][email protected][-A-Za-z0-9_.%]+\\.[A-Za-z]+'
getmail<-function(pattern,word){
mail<<-c()
sapply(word,function(x){
out<-gregexpr(pattern,x)
for (i in 1:length(out[[1]])){
if (out[[1]][i]>0)
mail<<-union(mail,substr(x,start=out[[1]][i],stop=out[[1]][i]+attr(out[[1]],"match.length")[i]-1))
}})
return(mail)
}
getmail(pattern,word)
[1] "[email protected]" "[email protected]" "[email protected]"
ls()
[1] "getmail" "mail" "pattern" "word"
該函數得到的結果,但我覺得它是更好的,如果沒有全局變量mail
在我運行getmail(模式,單詞)後的命名空間,我該如何修改它? 不要刪除sapply函數,按照我的方式,只是不要讓名字空間中的mail
。修改刪除R函數中全局變量的函數?
我知道我能以更簡單的方式得到結果,但我想了解更多關於功能的內容。
mail<-c()
out<-gregexpr(pattern,word)
for (i in 1:length(out)){
for (j in 1:length(out[[i]])){
if (out[[i]][j]>0)
mail<-union(mail,substr(word[i],start=out[[i]][j],stop=out[[i]][j]+attr(out[[i]],"match.length")[j]-1))}}
mail
[1] "[email protected]" "[email protected]" "[email protected]"
你只是簡單地使用'sapply'錯誤。 –