r - 使用 Sparklyr 计数模式匹配
问题描述
我一直在尝试使用 Sparklyr 计算模式匹配。
我正在尝试计算模式“;”的次数 出现在变量 room_number 中
这是 mytable :
room_number
A12;A19
A13
A15;A14;A20
当我不使用 Sparklyr 时,我可以使用此功能:
count.matches <- function(pat, vec) sapply(regmatches(vec, gregexpr(pat, vec)), length)
mytable <- mytable %>%
mutate(number_pattern = mapply(count.matches, c(';'), list(room_number)))
我得到:
room_number number_pattern
A12;A19 1
A13 0
A15;A14;A20 2
如果我尝试使用 sparklyr 在分布式 R 中应用代码,spark_apply
而不是mapply
,我会收到以下消息:
mytable <- mytable %>%
+ mutate(number_pattern = spark_apply(count.matches, c(';'), list(room_number)))
glimpse(mytable)
UseMethod(“escape”)中的错误:没有适用于“escape”的方法应用于“function”类的对象
你有什么建议吗 ?谢谢你的协助
解决方案
spark_apply
是一个独立的函数,不能在mutate
. 此外,它没有与以下相同的 API mapply
:
count.matches <- function(pat) function(df) {
f <- function(vec) sapply(regmatches(vec, gregexpr(pat, vec)), length)
dplyr::mutate(df, number_pattern = f(room_number))
}
mytable %>% spark_apply(count.matches(";"))
推荐阅读
- elasticsearch - 如何根据 ElasticSearch 中某个字段中出现的子字符串的数量进行评分
- r - 查找 R 中每个变量类别的中位数
- android - 当我添加到 pubspec.yaml 时,firebase auth 出现问题
- javascript - 为什么javascript在作为参数或索引传入时将数组解析为字符串
- puppeteer - 带有 puppeteer 的服务器端屏幕截图?
- python - 如何用另一个字典更新 Pymongo 文档?
- spring-boot - 在 Spring Boot 中设置 liquibase.changelogSchemaName 属性
- pandas - 我成功地从数据框中的列返回计数,但是在尝试将结果导入列时得到 NaN 值
- python - 如何将 2D np 数组添加到 3D np 数组的前面?
- r - 为什么 R while 循环不能用闪亮的框架实现?