Как перебрать диапазон идентификаторов ревизий при запросе к WikipediR? - PullRequest
0 голосов
/ 01 октября 2019

Я использую WikipediR для запроса идентификаторов ревизий, чтобы увидеть, является ли самое следующее редактирование «откатом» или «отменой»

Мне интересны тег и комментарий ревизии, чтобы определить, отменено ли редактирование/откат. мой код для этого для одного идентификатора ревизии:

library(WikipediR)

wp_diff<- revision_diff("en", "wikipedia", revisions = "883987486", properties = c("tags", "comment"), direction = "next", clean_response = T, as_wikitext=T)

Затем я преобразовываю вывод этого в df, используя код

library(dplyr)
library(tibble)
diff <- do.call(rbind, lapply(wp_diff, as.data.frame, stringasFactors=FALSE))

Это прекрасно работает для одного идентификатора ревизии,Мне интересно, как я зациклился бы или отобразил вектор множества идентификаторов ревизий

Я пытался

vec <- c("883987486","911412795")
for (i in 1:length(vec)){
wp_diff[i]<- revision_diff("en", "wikipedia", revisions = i, properties = c("tags", "comment"), direction = "next", clean_response = T, as_wikitext=T)
}

Но это создает ошибку Ошибка в (функция (...,row.names = NULL, check.rows = FALSE, check.names = TRUE,: аргументы подразумевают различное количество строк: 1, 0

Когда я пытаюсь преобразовать выходной список в кадр данных. Кто-нибудь есть какие-либо предложения. Я не уверен, как поступить.

Спасибо.

1 Ответ

0 голосов
/ 01 октября 2019

Попробуйте следующий код:

# Make a function
make_diff_df <- function(rev){
  wp_diff <- revision_diff("en", "wikipedia", revisions = rev,
                          properties = c("tags", "comment"), 
                          direction = "next", clean_response = TRUE, 
                          as_wikitext = TRUE)

  DF <- do.call(rbind, lapply(wp_diff, as.data.frame, stringasFactors=FALSE))

  # Define the names of the DF
  names(DF) <- c("pageid","ns","title","revisions.diff.from",
                  "revisions.diff.to","revisions.diff..",
                  "revisions.comment","revisions..mw.rollback.")
  return(DF)
}

vec <- c("883987486","911412795")

# Use do.call and lapply with the function
do.call("rbind",lapply(vec,make_diff_df))

Обратите внимание, что необходимо исправить имена DF внутри функции make_diff_df, чтобы "rbind" внутри do.call могло работать. Имена с двумя версиями из примера очень похожи.

Надеюсь, это поможет

...