使用正则匹配作为参数调用 mapply 时子字符串参数出错

Error in substring arguments when calling mapply with regmatches as argument

[![enter image description here][1]][1]以下代码编译了企业评论的数据框架,旨在从每一行中提取企业名称。我注意到前 14 行中没有与正则表达式的匹配项,那里没有问题。一旦我将第一行包含在匹配项中(在本例中为 15),我就会收到以下错误。

Error in substring(x[ind], so, eo) : invalid substring arguments

问题似乎出在正则表达式将结果发送到 index.list 和正则匹配无法使用 index.list 作为正确参数之间。

请注意,当我 运行 只是第 15 行而没有 mapply 时,我得到了正确的结果。如果有更有效的方法来代替 mapply 将 regmatches 的结果放入新列中,请告诉我。我不能使用 stringr 或其他包(学校作业)。

require("tm")
reviews <- VCorpus(DirSource("C:/...../reviews"))

all.reviews <-   data.frame(text=unlist(sapply(reviews,'[',"content")),stringsAsFactors=F)

data <- all.reviews[10:15,]

index.list <- mapply(regexpr, "(?<=Review of )(\w+ )+(?=-\s*   [A-Z])", data, perl=T))
rest.names <- mapply(regmatches, data, index.list)

我无法附上图片,所以这里是 all.reviews data.frame 第 15 行的示例(暗淡的 90 X 1):

来自 S. 在 Yelp 上对 Good To Go -Bronx (4/5) 的评论。 Good To Go 22 条评论 评级详细信息类别: 美式餐厅(传统)意大利美式餐厅(传统);意大利语 [编辑] 1894 Eastchester Rd Bronx; NY 10461 (718) 829-2222 http://www.good2gorestaurant.com 探索菜单添加照片营业时间:Mon-Thu;周日上午 10 点 - 晚上 10 点 Fri-Sat 上午 10 点 - 晚上 11 点适合儿童:是接受信用卡:是停车:Valet;车库;街道;私人地段着装:休闲 适合团体:是 价格范围:$ 接受预订:是

该函数的预期输出是一个包含 90 个元素的向量,其中每个元素都是餐厅名称(如果没有从字符串中提取任何内容,则为空白,因为还有其他评论格式,我将使用额外的正则表达式来处理陈述)。我们希望在第 15 个索引中看到 "Good to Go"。

我的一个同学给出了答案。事实证明,mapply 的最后一个参数应该是一个列表,而不是一个数据帧,所以 lapply 可以做到这一点:

data.mult <- all.reviews[1:15,]    

index.list <- lapply(data.mult,function(x) {
regexpr("(?<=Review of )([A-z-'\s*]+)+\w+(?=\s*-\s*[A-Z])",x,perl=T)})

rest.names <- mapply(regmatches, data.mult, index.list)