通过引用和聚合分配在数据表R中创建重复

时间:2017-05-18 10:19:01

标签: r data.table aggregation in-place

我在R中观察到data.table的奇怪行为,我想知道这是不是一个bug。这是我使用的代码:

    public List<Type> Ancestors(Type any)
    {
        var result = new List<Type>();
        result.Add(any);
        while (any != typeof(object))
        {
            any = any.BaseType;
            result.Insert(0, any);
        }
        return result;
    }
    public int Compare(Type lhs, Type rhs)
    {
        if (rhs.IsSubclassOf(lhs))
        {
            return -1;
        }
        else if (lhs.IsSubclassOf(rhs))
        {
            return +1;
        }
        else
        {
            var lAncs = Ancestors(lhs);
            var rAncs = Ancestors(rhs);
            int ix = 0;
            while (lAncs[ix] == rAncs[ix])
            {
                ix++;
            }
            return lAncs[ix].FullName.CompareTo(rAncs[ix].FullName);
        }
    }

我觉得奇怪的输出部分如下:

Dictionary<Type,List<Type>>

正如您所看到的,即使所有键完全相同,我最终也会得到重复的行。

如果在输出上重新运行聚合,我得

num_req <- fread("number_requests.csv")
num_req[, nrequests := sum(nrequests, na.rm=T), by = list(reqtype, server, timestamp)]

现在,如果我这样做

   nrequests timestamp    reqtype   server   
3:        22 1489276860   reqtype1  server1
4:        22 1489276860   reqtype1  server1

然后我没有得到任何重复的行。

一些信息:

  • 数据集有75015360行,但即使使用子集( nrequests timestamp reqtype server 3: 44 1489276860 reqtype1 server1 4: 44 1489276860 reqtype1 server1 ),如果我按引用使用分配,也显示相同的重复

  • 我正在使用data.table版本1.10.4

  • 我正在使用R版本3.3
  • 我正在使用RStudio Server版本1.0.44
  • 主机虚拟机是红帽企业Linux服务器版本6.8(圣地亚哥)

问题是我是否滥用tmp2 <- num_req[, list(nrequests = sum(nrequests, na.rm=T)), by = list(reqtype, server, timestamp)] 运算符或者这是否是错误?

感谢您的帮助!

0 个答案:

没有答案