RSiteSearch не работает с запросами с несколькими словами - PullRequest
0 голосов
/ 16 февраля 2019

Я новичок в программировании на R и слежу за книгой Ричарда Коттона "Learning R" .Однако когда я опробовал функцию поиска RSiteSearch, вместо этого пробелы в запросе заменяются на «+».Например, "Naive Bayes" станет "Naive+Bayes", в результате чего поисковая система найдет 0 результатов.Кто-нибудь может мне с этим помочь?Я уже пытался заключить слова в фигурные скобки следующим образом: "{Naive Bayes}", как показывают примеры в книге и в Интернете, но, похоже, это не помогает.

1 Ответ

0 голосов
/ 16 февраля 2019

Согласен, он не работает, как указано в документации.Если вы посмотрите на исходный код функции, похоже, что есть ошибка.

function (string, restrict = c("functions", "vignettes", "views"), 
  format = c("normal", "short"), sortby = c("score", "date:late", 
    "date:early", "subject", "subject:descending", "from", 
    "from:descending", "size", "size:descending"), matchesPerPage = 20) 
{
  string <- paste0("http://search.r-project.org/cgi-bin/namazu.cgi?query=", 
    URLencode(gsub(" ", "+", string), reserved = TRUE))
  mpp <- paste0("max=", matchesPerPage)
  format <- paste0("result=", match.arg(format))
  restrictVALS <- c("functions", "vignettes", "views")
  restr <- match.arg(restrict, choices = restrictVALS, several.ok = TRUE)
  restr <- paste(paste0("idxname=", restr), collapse = "&")
  sortby <- match.arg(sortby)
  sortby <- paste0("sort=", switch(sortby, score = , `date:late` = , 
    `date:early` = sortby, subject = "field:subject:ascending", 
    `subject:descending` = "field:subject:descending", from = "field:from:ascending", 
    `from:descending` = "field:from:descending", size = "field:size:ascending", 
    `size:descending` = "field:size:descending"))
  qstring <- paste(string, mpp, format, sortby, restr, sep = "&")
  browseURL(qstring)
  cat(gettextf("A search query has been submitted to %s", 
    "http://search.r-project.org"), "\n", sep = "")
  cat(gettext("The results page should open in your browser shortly\n"))
  invisible(qstring)
}

Похоже, что есть проблема с URLencode(gsub(" ", "+", string), reserved = TRUE).Это добавляет +, но затем экранирует знак в запросе, который нам не нужен.

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

new_search = function (string, restrict = c("functions", "vignettes", "views"), 
          format = c("normal", "short"), sortby = c("score", "date:late", 
                                                    "date:early", "subject", "subject:descending", "from", 
                                                    "from:descending", "size", "size:descending"), matchesPerPage = 20) 
{

  if(grepl("[{}]",string)){
    string = gsub("[{}]","",string)
    reserved <- TRUE
  }else{
    reserved <- FALSE
  }

  string <- paste0("http://search.r-project.org/cgi-bin/namazu.cgi?query=", 
                   URLencode(string, reserved = reserved))

  mpp <- paste0("max=", matchesPerPage)
  format <- paste0("result=", match.arg(format))
  restrictVALS <- c("functions", "vignettes", "views")
  restr <- match.arg(restrict, choices = restrictVALS, several.ok = TRUE)
  restr <- paste(paste0("idxname=", restr), collapse = "&")
  sortby <- match.arg(sortby)
  sortby <- paste0("sort=", switch(sortby, score = , `date:late` = , 
                                   `date:early` = sortby, subject = "field:subject:ascending", 
                                   `subject:descending` = "field:subject:descending", from = "field:from:ascending", 
                                   `from:descending` = "field:from:descending", size = "field:size:ascending", 
                                   `size:descending` = "field:size:descending"))
  qstring <- paste(string, mpp, format, sortby, restr, sep = "&")
  browseURL(qstring)
  cat(gettextf("A search query has been submitted to %s", 
               "http://search.r-project.org"), "\n", sep = "")
  cat(gettext("The results page should open in your browser shortly\n"))
  invisible(qstring)
}

Это кажется очень странным.Если мы делаем что-то не так, пожалуйста, дайте нам знать, и я приму ответ.Если это указывает на ошибку, нам нужно что-то с этим сделать.

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