【问题标题】:attempt to set an attribute on NULL尝试将属性设置为 NULL
【发布时间】:2018-10-12 06:42:49
【问题描述】:
Error in data.table::rbindlist(.data, ...) : 
  attempt to set an attribute on NULL

我在以下位置收到此错误:

FBInsightsExpanded <- list.stack(list.select(FBInsightsExpanded, website_purchase_roas = website_purchase_roas$action_link_click_destination));
  print(FBInsightsExpanded)

这就是 DF 的样子。我猜我需要用 NA 替换 NULL。但目前无法修复它

 website_purchase_roas  date_stop
1    0.673001 offsite_conversion.fb_pixel_purchase, 6.506892 2018-10-11
2    1.369035 offsite_conversion.fb_pixel_purchase, 0.594109 2018-10-11
3    2.084238                                           NULL 2018-10-11
4     1.31209                                           NULL 2018-10-11
5    2.337662                                           NULL 2018-10-11
6    0.996678                                           NULL 2018-10-11
7    1.936385 offsite_conversion.fb_pixel_purchase, 1.482508 2018-10-11
8    2.777778                                           NULL 2018-10-11
9           0                                           NULL 2018-10-11
10   1.994885                                           NULL 2018-10-11
11   2.402023                                           NULL 2018-10-11
12   4.635056 offsite_conversion.fb_pixel_purchase, 5.222421 2018-10-11
13          0                                           NULL 2018-10-11
14   1.990291                                           NULL 2018-10-11
15   6.557377                                           NULL 2018-10-11
16   3.703704                                           NULL 2018-10-11
17   3.038936                                           NULL 2018-10-11

代码如下:

library(httr)
library(fbRads)
library(rlist)
library(rhdfs)
library(Rfacebook)
library(SocialMediaLab)
library(dplyr)


app <- oauth_app('facebook', 'xxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxxx')
fbacc <- fbad_init(accountid = id, token = "token", version = '3.0')


FBInsightsExpanded <- fb_insights(level = 'ad',
                                        time_range=sprintf("{'since':%s,'until':%s}", paste('"', maxDate, '"', sep=''), paste('"', yesterdayDate, '"', sep='')), time_increment= 1  ,                        
                                        fields = toJSON(c("impressions",
                                                  "date_start",
                                                  "reach",
                                                  "frequency", 
                                                  "ad_name",
                                                  "adset_name", 
                                                  "campaign_name", 
                                                  "clicks",
                                                  "cpc",
                                                  "cpm",
                                                  "cpp",
                                                  "ctr",
                                                  "objective",
                                                  "spend", 
                                                  "account_name",
                                                  "ad_id",
                                                  "adset_id",
                                                  "buying_type",
                                                  "campaign_id",
                                                  "canvas_avg_view_time",
                                                  "cost_per_unique_click",
                                                  "inline_link_click_ctr",
                                                  "social_spend",
                                                  "total_action_value",
                                                  "unique_clicks",
                                                  "unique_ctr",
                                                  "website_purchase_roas")));


  FBInsightsExpanded <- list.stack(list.select(FBInsightsExpanded, website_purchase_roas = website_purchase_roas$value));

** 编辑:建议的包列表和相关代码位

【问题讨论】:

  • 我不知道你希望人们如何帮助你,当你提供来自一些未知包的函数的代码并且没有关于你为什么使用&lt;&lt;- 的上下文时。您需要创建一个可重现的最小示例。
  • 更新/.......

标签: r data.table


【解决方案1】:

我猜 Facebook 正在以列表格式为您提供 JSON?如果您想要一个数据框,您首先需要从列表中解压缩它,但这是与您的原始问题不同的主题。

就您最初的问题而言,使用purrr 中的 is_empty() 函数有一个非常简单的方法。不清楚原始示例中具有 NULL 值的列被称为什么,所以我将其称为 value 和数据框 fb_data

给你:

library(purrr)
library(tidyverse)

fb_data <- fb_data %>%
    mutate(value = ifelse(is_empty(value) == TRUE,NA,value))

这是您在此执行的操作:您正在检查 value 列中的行是否为空(即 NULL),如果为真,则将其更改为 NA,否则您将不理会它。

【讨论】:

  • is_emptyis.null 有什么优势?
  • 在这种情况下可能差别不大,tbh!我想我只是倾向于在基础 R 上使用 tidyverse 工具。
  • @RandallHelms:我没有得到适用于“list”类对象的“mutate_”的适用方法
  • 是的,那是因为 Facebook 给了你一个列表,正如我在评论开头提到的那样。您需要从列表转换为数据框。如果这是您以前从未做过的事情,请查看:r-bloggers.com/converting-a-list-to-a-data-frame