相关疑难解决方法(0)

通过公共列R合并不同长度的表

我有两个不同长度的表,我需要将它们合并为两个常见的列(季节和客户端),并在没有共同元素的情况下用NA填充单元格.下面我展示了我需要的两张原始表和最终表中的一小部分.我尝试了许多没有成功的事情.

season  client.ID   qtty
1998    13  30
1999    13  30
2000    13  29
1998    28  18
1999    28  18
2000    28  18
1998    35  21
1999    35  21
2000    35  21

season  client.ID   vessel.ID   overLength
1998    28  29  17.1
1998    28  1809    4.26
1998    28  2215    9.45
1998    28  4173    5.8
1998    28  8151    4.5
1999    28  29  17.1
1999    28  1809    4.26
1999    28  2215    9.45
1999    28  4173    5.8
1999    28  8151    4.5
2000    28  29  17.1
2000 …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
1万
查看次数

删除R中给定类型的所有对象

如何使用rm删除的所有对象某种类型的R

我目前有一堆定义的功能,我想要删除.

我知道ls有一个pattern选项,但这只有在我命名模式中的所有函数时才有用(我不是).

r

4
推荐指数
1
解决办法
1168
查看次数

如何计算常规类型的已分配内存的大小

我需要使用read.table从csv(逗号分隔值)读取的一些数据库,并且我想知道如何为每种类型的变量计算分配的内存的大小.

怎么做 ?

编辑 - 换句话说:从.csv文件读取的一般数据帧的R内存量是多少?

r

3
推荐指数
1
解决办法
727
查看次数

R 无法在 ff 过程上分配内存。怎么会?

我正在使用配备 Intel Xeon 处理器和 24 GB RAM 的 64 位 Windows Server 2008 计算机。我在尝试读取 11 GB(>2400 万行,20 列)的特定 TSV(制表符分隔)文件时遇到问题。我平常的伙伴,read.table让我失望了。ff我目前正在通过以下过程尝试该软件包:

> df <- read.delim.ffdf(file       = "data.tsv",
+                       header     = TRUE,
+                       VERBOSE    = TRUE,
+                       first.rows = 1e3,
+                       next.rows  = 1e6,
+                       na.strings = c("", NA),
+                       colClasses = c("NUMERO_PROCESSO" = "factor"))
Run Code Online (Sandbox Code Playgroud)

这对于大约 600 万条记录来说效果很好,但随后我收到了一个错误,如您所见:

read.table.ffdf 1..1000 (1000) csv-read=0.14sec ffdf-write=0.2sec
read.table.ffdf 1001..1001000 (1000000) csv-read=240.92sec ffdf-write=67.32sec
read.table.ffdf 1001001..2001000 (1000000) csv-read=179.15sec ffdf-write=94.13sec
read.table.ffdf 2001001..3001000 (1000000) csv-read=792.36sec ffdf-write=68.89sec
read.table.ffdf …
Run Code Online (Sandbox Code Playgroud)

csv memory-management r large-data ff

3
推荐指数
1
解决办法
5219
查看次数

环境中有哪些对象?(R)

我想知道我的环境中有什么类型的物体.

我可以证明这样的人是谁:

ls()
Run Code Online (Sandbox Code Playgroud)

但运行类似的东西

sapply(ls(), class)
Run Code Online (Sandbox Code Playgroud)

(显然)不会告诉我们我们所拥有的对象的类型(类)(函数,数字,因子等......)

运用

ls.str()
Run Code Online (Sandbox Code Playgroud)

会告诉我我的对象是什么类,但我不能(例如)要求所有的对象是因子/ data.frame/functions - 等等.

我可以捕获ls.str()的输出,但可能有更聪明的方法 - 任何想法它是什么?

environment types r class object

2
推荐指数
2
解决办法
841
查看次数

将后缀附加到csv文件(或SQLite数据库)中的条目列

我有一个相对较大的csv文件(1.2gb ...大到我的一台计算机上的2GB RAM).对于一列中的每个条目,我想附加"1C",以便我可以加入/合并另一个dataframe/db表.

如果文件不是那么大,那么很容易read.csv导入data然后再使用data$symbol <- paste(data$symbol, "1C", sep="").但现在我收到了can't allocate vector of size x警告.

手动解决方案scan(),我唯一的选择吗?(我有点害怕破坏我的数据)谢谢!

csv r

2
推荐指数
2
解决办法
2696
查看次数

仅列出类 data.frame 中的对象

可能的重复:
识别给定类的所有对象以进行进一步处理

我想为工作区中的每个数据帧建立索引。我该如何写一些听起来像:

dindex <- ls(class=data.frame)
Run Code Online (Sandbox Code Playgroud)

r class object

2
推荐指数
1
解决办法
1307
查看次数

为什么R在使用read.csv()时会占用这么多内存?

我正在Linux上运行R(kubuntu trusty).我有一个近400MB的csv文件,主要包含数值:

$ ls -lah combined_df.csv 
-rw-rw-r-- 1 naught101 naught101 397M Jun 10 15:25 combined_df.csv
Run Code Online (Sandbox Code Playgroud)

我启动R,df <- read.csv('combined_df.csv')(我得到一个1246536x25数据帧,3个int列,3个logi,1个因子和18个数字),然后使用此处的脚本来检查内存使用情况:

R> .ls.objects()
         Type  Size    Rows Columns
df data.frame 231.4 1246536      25
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它报告的内存较少,但我想这只是因为CSV不是数字数据的有效存储方法.

但是当我检查系统内存使用情况时,top说R使用了我可用的8GB内存的20%.并ps报告类似:

$ ps aux|grep R
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
naught1+ 32364  5.6 20.4 1738664 1656184 pts/1 S+   09:47   2:42 /usr/lib/R/bin/exec/R
Run Code Online (Sandbox Code Playgroud)

用于379MB数据集的1.7Gb RAM.这似乎过分了.我知道这ps不一定是衡量内存使用情况的准确方法,但肯定不会超过5倍?!为什么R使用这么多内存?

此外,R似乎在gc()输出中报告类似的东西:

R> gc()
           used  (Mb) gc …
Run Code Online (Sandbox Code Playgroud)

csv file-io memory-management r

2
推荐指数
1
解决办法
726
查看次数

工作日/周/月的最佳提取日期,内存紧凑性?

执行摘要:*提高下面聚合fn调用中使用的基于日期的提取函数的内存效率; 不吹灭1Gb内存限制.*.

我有一个大的数据集TR存储在数据帧(3个COLS,1200万行;〜200MB)
的列CUSTOMER_ID(整数),VISIT_DATE和visit_spend(数字)数据集需要注册,所以这是因为它可以作为可再现的be:
数据集看起来像(完整文件在这里,需要注册):

customer_id,visit_date,visit_spend 
2,2010-04-01,5.97 
2,2010-04-06,12.71 
2,2010-04-07,34.52
#... 12146637 rows in total
Run Code Online (Sandbox Code Playgroud)

日期范围限制在2010-04-01 ... 2011-06-30(整数14700..15155)

在这里,我想问visit_date字段选择什么是最佳表示.我做了一些aggregate调用(底部的示例代码)来炸毁内存.我也使用日期实用程序fns,就像这里附带的东西(它们需要重新编码以获得紧凑性,但这些是我想做很多的典型操作).所以我需要一个代表避免这个的日期.

正如我所看到的,我可以使用三种可能的表示来访问visit_date字段,这里有优点和缺点,我正在尝试做什么.我的目标是获得不会破坏内存的格式,并在这些日期处理操作,聚合等方面给予最少的悲伤:

  • 整数因子
    缺点:
    1)不允许比较或排序操作,因此聚合是痛苦的.
    2)我需要硬编码所有与日期相关的功能(例如,2010年4月的14700..14729) - 可行但痛苦.
    3)需要手动处理图形.
  • 数字
    缺点:由于要求asDate()无处不在,因此会耗尽内存.
  • 日期
    优点:最适合打印(),图形和直方图; 在绘图之前不需要手动处理.
    缺点:如果我应用任何字符串操作(格式)或聚合,则会爆炸(内存不足).我认为这是chron :: Date,它是你设置class(tr$visit_date)<-'Date')或使用时得到的任何东西read.csv(colClasses=c(...,"Date",...)

这些是我希望运行很多的日期实用程序fns(但目前它们在聚合期间会爆炸):

# Utility fns related to date    
library(chron)    
# Get dayoftheweek as integer 0(Sun)..6(Sat)
dayofweek <- function(ddd) {
    with( month.day.year(ddd), day.of.week(month,day,year) …
Run Code Online (Sandbox Code Playgroud)

memory-management aggregate r date

1
推荐指数
1
解决办法
3484
查看次数

在R中应用函数会导致内存分配错误

我试图在R中的数据帧的每一行上进行计算,并将计算作为新列添加到帧中.我开始使用"by"函数,但是计算速度非常慢,所以我转而使用"apply"函数.我想象它的工作方式是使用我的函数运行apply,将输出保存到变量并将该数据附加到原始数据框.

我创建了一个函数来计算保险计划的期限长度并返回该值,该值在样本数据集上正常工作.当我使用我更大的数据集时,我收到"无法分配大小的矢量......"的错误.我知道很多人建议获得更多的内存,但我已经拥有16GB的内存并且整个数据集已加载到R我的计算机中说它只使用了7.7GB的内存.这个数据集有44列,有大约1100万条记录,所以我没看到如何再添加一列数据占用8GB内存?

朝着正确方向的任何一点都会很棒.


以下是我正在使用的功能:

get_term_length <- function(row_data){

    # convert values to dates
    expiration_date <- as.Date( row_data[42] )
    start_date <- as.Date( row_data[43] )
    cancellation_date <- as.Date( row_data[44] )

    # check to see if the cancellation date is NA - just use entire policy length
    if( is.na(cancellation_date) ){
        return( expiration_date - start_date) )
    }

    # check to see if policy was cancelled early
    if(cancellation_date < expiration_date){
        return( cancellation_date - start_date )
    }

    # the policy was for the …
Run Code Online (Sandbox Code Playgroud)

r data.table

1
推荐指数
1
解决办法
1218
查看次数

R错误:无法分配大小为366.6 MB的向量

我有以下for循环

for( i in 1:No_Simulations) {
      Vec =   rowSums(  sweep(Matrix1,MARGIN=2,Matrix2[i,],`*`)  )
      if( i == 1 ) {  Result <- Vec } else {   Result = cbind(  Result , Vec )  } }
Run Code Online (Sandbox Code Playgroud)

其中No_Simulations = 10000且Matrix2的dim为10000 100,Matrix1的dim也为10000 100.

我无法运行这部分代码,因为R编译器给我以下错误:"不可能的所有un vecteur de taille 366.6 Mo"

即无法分配大小为366.6 MB的向量.我也尝试使用memory.limit()来增加内存大小,但它仍然无法正常工作.有人可以帮帮我吗

optimization r

0
推荐指数
1
解决办法
2358
查看次数