Как использовать map() с возможно ()

Я использую map() чтобы получить данные из Facebook, используя следующий код:

posts_data <- map(posts$query_id, getPost, token = fb_oauth, n = 1000)

Тем не менее, некоторые из query_id наблюдения неверны или являются общими событиями, которые API не может получить, и выдает мне такую ​​ошибку, как:

Error in callAPI(url = url, token = token, api = api) : 
  Unsupported get request. Object with ID '1816137521765810_1832190963493790' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api

Я понимаю, что я могу использовать possibly() продолжать делать вызовы при возврате вывода для этих ошибок, так что функция не останавливается. Но я не знаю, как использовать possibly() а также map() вместе, так как возможно () принимает только функцию в качестве аргумента и не позволяет мне передавать дополнительные аргументы этой функции.

2 ответа

Решение

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

posts_data <- map(posts$query_id, 
      possibly(getPost, otherwise = NA_character_), 
      token = fb_oauth, n = 1000)

Я предполагаю, что вы пытаетесь извлечь "комментарии" и "ответы" и т. Д. У меня есть немного другой путь к предыдущему ответу - который превращается в аккуратный фрейм данных (просто будьте осторожны с конфликтом между dplyr и plyr)

1 Извлеките ваш фрейм постов (что вы уже сделали)

2 Подмножество постов, где 'comments'> 0

sum(OB1_posts$comments_count)
mydata <- OB1_posts[OB1_posts$comments_count > 0,]
sum(mydata$comments_count) # How many 'Posts' had Comments

3 Извлечь комментарии

3.1: создайте функцию require () для перехвата ошибок и игнорирования

library(purrr)
BruteForce_comments <- possibly( getPost, otherwise = NA_real_) 

Comments <- OB1_posts$id %>%
map(BruteForce_comments, token = fboauth, n = 200000, comments = TRUE,
likes = FALSE, n.likes=1, n.comments=600000) %>%
reduce(append)

Конвертировать в DataFrame

library(plyr)
OB1_Comments <- ldply(Comments, data.frame)

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

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

Другие вопросы по тегам