我一直在尝试使用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
如果我尝试使用spark_apply
而非mapply
在带有sparklyr的分布式R中应用代码,则会收到以下消息:
mytable <- mytable %>%
+ mutate(number_pattern = spark_apply(count.matches, c(';'), list(room_number)))
glimpse(mytable)
UseMethod(“ escape”)中的错误: 没有适用于“功能”类对象的“转义”适用方法
您有什么建议吗? 感谢您的帮助
答案 0 :(得分:1)
spark_apply
是一个独立功能,不能在mutate
中使用。此外,它与mapply
的API不同:
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(";"))