R:如何在 lapply() 中应用 grep()

HNS*_*SKD 5 r lapply sapply tapply

我想在 R 中应用 grep(),但我不太擅长 lapply()。我知道 lapply 能够获取一个列表,将函数应用于每个成员并输出一个列表。例如,假设x一个列表由 2 个成员组成。

> x<-strsplit(docs$Text," ")
> 
> x
[[1]]
 [1] "I"         "lovehttp"  "my"        "mum."      "I"         "love"     
 [7] "my"        "dad."      "I"         "love"      "my"        "brothers."

[[2]]
 [1] "I"         "live"      "in"        "Eastcoast" "now."      "Job.I"    
 [7] "used"      "to"        "live"      "in"        "WestCoast."  
Run Code Online (Sandbox Code Playgroud)

我想应用 grep() 函数来删除由 http 组成的单词。所以,我会申请:

> lapply(x,grep(pattern="http",invert=TRUE, value=TRUE))
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它说

Error in grep(pattern = "http", invert = TRUE, value = TRUE) : 
argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

所以,我试过了

> lapply(x,grep(pattern="http",invert=TRUE, value=TRUE,x))
Run Code Online (Sandbox Code Playgroud)

但它说

Error in match.fun(FUN) : 
'grep(pattern = "http", invert = TRUE, value = TRUE, x)' is not a 
function, character or symbol
Run Code Online (Sandbox Code Playgroud)

请帮忙,谢谢!

RHe*_*tel 5

这可以用一行完成:

lst <- lapply(lst, grep, pattern="http", value=TRUE, invert=TRUE)

#lst
#[[1]]
# [1] "I"         "my"        "mum."      "I"         "love"      "my"        "dad."      "I"         "love"      "my"        "brothers."
#
#[[2]]
# [1] "I"          "live"       "in"         "Eastcoast"  "now."       "Job.I"      "used"       "to"         "live"       "in"         "WestCoast."
Run Code Online (Sandbox Code Playgroud)

如果您不想删除包含模式的整个单词并仅删除模式本身,同时保留单词的其余部分(如评论中所述),您可以使用gsub而不是grep

lapply(lst, gsub, pattern="http", replacement="")
#[[1]]
# [1] "I"         "love"      "my"        "mum."      "I"         "love"      "my"        "dad."      "I"         "love"      "my"        "brothers."
#
#[[2]]
# [1] "I"          "live"       "in"         "Eastcoast"  "now."       "Job.I"      "used"       "to"         "live"       "in"         "WestCoast."
Run Code Online (Sandbox Code Playgroud)