如何使用 map() 和 possible()
How to use map() with possibly()
我正在使用 map()
从 Facebook 获取 post 数据,代码如下:
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()
,因为 possible() 只接受一个函数作为参数,并且不允许我向该函数传递额外的参数。
possibly
将一个函数作为参数,但它 returns 另一个函数,它接受与其输入相同的参数。所以你应该能够做到:
posts_data <- map(posts$query_id,
possibly(getPost, otherwise = NA_character_),
token = fb_oauth, n = 1000)
我假设您要提取 'comments' 和 'replies' 等
我有一个与之前的答案略有不同的方法——转换成一个整洁的数据帧(只是要小心 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: 创建 possible() 函数来捕获错误并忽略
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)
这与回复相同,然后将它们合并在一起(但您只需要先 'streamline' 列配置)
如果还有什么问题可以私信我。这个软件包非常出色,您可以从中获取大量信息 - 即使在 1 月下旬发生变化后也是如此
我正在使用 map()
从 Facebook 获取 post 数据,代码如下:
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()
,因为 possible() 只接受一个函数作为参数,并且不允许我向该函数传递额外的参数。
possibly
将一个函数作为参数,但它 returns 另一个函数,它接受与其输入相同的参数。所以你应该能够做到:
posts_data <- map(posts$query_id,
possibly(getPost, otherwise = NA_character_),
token = fb_oauth, n = 1000)
我假设您要提取 'comments' 和 'replies' 等 我有一个与之前的答案略有不同的方法——转换成一个整洁的数据帧(只是要小心 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: 创建 possible() 函数来捕获错误并忽略
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)
这与回复相同,然后将它们合并在一起(但您只需要先 'streamline' 列配置)
如果还有什么问题可以私信我。这个软件包非常出色,您可以从中获取大量信息 - 即使在 1 月下旬发生变化后也是如此