Частичное совпадение (pmatch) не работает на shinyapps.io - PullRequest
0 голосов
/ 09 июля 2020

Я работал над приложением для удаления веб-страниц, чтобы собрать некоторую информацию из JSTOR. Приложение работает нормально локально, но не работает при развертывании на shinyapp.io.

Идея проста, приложение загружает html страниц (например: https://www.jstor.org/action/doBasicSearch?Query=example&acc=off&wc=on&fc=off&group=none) и прочтите список сбоку, где можно найти информацию о количестве совпадений для каждой дисциплины.

webpage <- read_html(filePath)
hits_html <- html_nodes(webpage, 'li')
hits <- html_text(hits_html)

Чтобы создать фрейм данных, приложение использует список дисциплин, чтобы выбрать частичное совпадение текстовая информация с веб-страницы. Это создает индекс выбранной дисциплины в списке дисциплин веб-страницы следующим образом:

disciplines <- list("\r\n                African American Studies",
                    "\r\n                African Studies",
                    "\r\n                Agriculture",
                    "\r\n                American Studies",
                    "\r\n                Anthropology",
                    "etc...")

index <- pmatch(disciplines[[i]], hits)

string <- hits[index]

Строка с выбранной дисциплиной преобразуется в число c следующим образом:

begin<-regexpr("\\(", string)
end<-regexpr("\\)", string)
        
k<-substring(string, begin+1, end-1)
k<-sub(",", "", k)
k<-as.numeric(k)

Это отлично работает локально, но не работает на shinyapps.io. После нескольких тестов я заметил, что проблема связана с функцией pmatch (или с любым сопоставлением, которое я пробовал). Функции сопоставления возвращают NA при использовании в shinyapps.io, хотя локально они работают нормально. Я уже пробовал некоторые из следующих альтернатив:

index <- pmatch(disciplines[[t]], as.list(hits)) # DOES NOT WORK ON SHINYAPPS.IO
index <- pmatch(disciplines[[t]], hits) # DOES NOT WORK ON SHINYAPPS.IO
index <- which(stringr::str_detect(hits, disciplines[[t]]))[[1]] # DOES NOT WORK ON SHINYAPPS.IO
index <- sjmisc::str_find(hits, disciplines[[t]])[[1]] # DOES NOT WORK ON SHINYAPPS.IO

Кто-нибудь когда-нибудь сталкивался с подобной проблемой?

1 Ответ

1 голос
/ 15 июля 2020

Артур! Похоже, это связано с разделением строк, которое вы используете в качестве ожидаемого результата. Этот результат с "\ r \ n" будет соответствовать только результату HTML, полученному при его запуске в среде Windows. Если ваш сервер основан на Unix, он не будет соответствовать, так как там разделение строк - "\ n".

Попробуйте удалить \ r из ожидаемого результата и повторно запустите приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...