Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 大数据表的高效内存子集设置_R_Memory_Data.table_Subset - Fatal编程技术网

R 大数据表的高效内存子集设置

R 大数据表的高效内存子集设置,r,memory,data.table,subset,R,Memory,Data.table,Subset,我有一个大小为11GB和16GB的SQLite数据库(与OS等共享)。我想使用data.table执行子集设置方法: # database connection con = dbConnect(dbDriver("SQLite"), dbname=sqlite_database) # read table from database inventory <- as.data.table(dbGetQuery( con,'select * from inventory')) # subs

我有一个大小为11GB和16GB的SQLite数据库(与OS等共享)。我想使用data.table执行子集设置方法:

# database connection
con = dbConnect(dbDriver("SQLite"), dbname=sqlite_database)

# read table from database
inventory <- as.data.table(dbGetQuery( con,'select * from inventory'))

# subset table
unfulfilled_inventory <- inventory[period >= stableStateStart, .(period, articleID, unfulfilledQuantities, backlog, stock)]

是否有一种方法可以以更高效的内存方式进行此子集设置?我试着建立一个向量进行向量扫描,但结果是一样的。或者有没有一种方法可以使用交换空间来执行此操作(我并不真正关心速度)。

目前我只想到两种方法:

  • 使用
    setDT
    而不是
    as.data.table
    ,从数据库读取数据时将节省一些内存

  • 您可以在数据库端计算您的条件,然后在R中使用computed列:

  • 在sql查询中添加
    orderbytmpcol
    ,也可能有助于在后面的步骤中设置dt(,key=“tmpcol”)

  • 确保使用数据。表1.9.6-最近发布到CRAN。

    目前我只想到两个:

  • 使用
    setDT
    而不是
    as.data.table
    ,从数据库读取数据时将节省一些内存

  • 您可以在数据库端计算您的条件,然后在R中使用computed列:

  • 在sql查询中添加
    orderbytmpcol
    ,也可能有助于在后面的步骤中设置dt(,key=“tmpcol”)

  • 确保使用数据。表1.9.6-最近发布到CRAN。

    只是为了确认,此处哪个对象是
    5.2GB
    ?另外,
    dim(inventory)
    会产生什么结果?更新问题只是为了确认,此处的对象是
    5.2GB
    ?还有
    dim(库存)
    会产生什么结果?更新了问题
    dim(unfulfilled_inventory)
    [1] 127500000         6
    
    sql = "SELECT *, period >= stableStateStart AS tmpcol FROM inventory"
    inventory = setDT(dbGetQuery(conn, sql), key="tmpcol")
    inventory[.(TRUE)]