如何使用map()with possible()

时间:2018-05-23 10:52:22

标签: r purrr rfacebook

我使用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(),因为might()只接受一个函数作为参数,并且不允许我将其他参数传递给该函数。

2 个答案:

答案 0 :(得分:4)

possibly将函数作为参数,但它返回另一个函数,该函数接受与其输入相同的参数。所以你应该能够做到:

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

答案 1 :(得分:1)

我假设你试图提取评论&#39;和回复&#39;等等 我对前面的答案略有不同 - 它转换成一个整洁的数据帧(只是对dplyr和plyr之间的冲突持谨慎态度)

1提取您的帖子数据框(您已经完成)

2将帖子置于哪里&#39;评论&#39; &GT; 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:创建might()函数来捕获错误并忽略

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)

对于回复,这是相同的,然后将它们合并在一起(但您必须首先简化&#39;列配置)

如果您有任何其他问题,请发送给我。这个套餐非常出色,你可以从中获得大量的信息 - 即使是在1月下旬的变化之后