Как решить: заблокировано политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin»

R не имеет возможности применить функцию непосредственно к совпадению через gsub. Вам действительно нужно извлечь совпадение, преобразовать значение, а затем заменить значение. С функцией regmatches это легко релятивируется. Например,

x<-"(990283)M (31)O (29)M (6360)M"

f<-function(x) {
    v<-as.numeric(substr(x,2,nchar(x)-1))
    paste0(v+5,".1")
}

m <- gregexpr("\\(\\d+\\)", x)
regmatches(x, m) <- lapply(regmatches(x, m), f)
x
# [1] "990288.1M 36.1O 34.1M 6365.1M"

Конечно, вы можете сделать f делать все, что вам нравится, просто убедиться, что он удобен для вектора. Конечно, вы можете обернуть это в свою собственную функцию

gsubf <- function(pattern, x, f) {
    m <- gregexpr(pattern, x)
    regmatches(x, m) <- lapply(regmatches(x, m), f)
    x   
}
gsubf("\\(\\d+\\)", x, f)

. Обратите внимание, что в этих примерах мы не используем группу захвата, мы просто хватаем весь матч. Есть способы извлечь группы захвата, но они немного беспорядочны. Если вы хотите представить пример, где требуется такое извлечение, я мог бы придумать что-то более приятное.

0
задан diwakar g 30 December 2018 в 03:08
поделиться