标签: ff

在R中子集ffdf对象

我正在使用R的ff包,我有一些ffdf我需要使用的对象(尺寸大约1.5M x 80).虽然我在高效的切片/切割操作中遇到了一些麻烦.

例如,我有两个名为"YEAR"和"AGE"的整数列,我想在YEAR是2005年时创建一个AGE表.

一种方法是:

ffwhich <- function(x, expr) {
  b <- bit(nrow(x))
  for(i in chunk(x)) b[i] <- eval(substitute(expr), x[i,])
  b
}
bw <- ffwhich(a.fdf, YEAR==1999)
answer <- table(a.fdf[bw, "AGE"])
Run Code Online (Sandbox Code Playgroud)

table()操作速度快,但建设的位向量是相当缓慢.任何人都有更好的建议吗?

r ff

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

使用ff包导入文本文件

我有一个450万行和90列的文本文件导入到R.使用read.table我得到cannot allocate vector of size...错误消息所以我尝试使用ff包导入数据子集之前提取我感兴趣的观察结果(有关详细信息,请参阅我之前的问题) :将选择crteria添加到read.table).

所以,我使用以下代码导入:

test<-read.csv2.ffdf("FD_INDCVIZC_2010.txt", header=T)
Run Code Online (Sandbox Code Playgroud)

但是这会返回以下错误消息:

Error in read.table.ffdf(FUN = "read.csv2", ...) : 
only ffdf objects can be used for appending (and skipping the first.row chunk)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

以下是文本文件的前5行:

    CANTVILLE.NUMMI.AEMMR.AGED.AGER20.AGEREV.AGEREVQ.ANAI.ANEMR.APAF.ARM.ASCEN.BAIN.BATI.CATIRIS.CATL.CATPC.CHAU.CHFL.CHOS.CLIM.CMBL.COUPLE.CS1.CUIS.DEPT.DEROU.DIPL.DNAI.EAU.EGOUL.ELEC.EMPL.ETUD.GARL.HLML.ILETUD.ILT.IMMI.INAI.INATC.INFAM.INPER.INPERF.IPO ...
1             1601;1;8;052;54;051;050;1956;03;1;ZZZZZ;2;Z;Z;Z;1;0;Z;4;Z;Z;6;1;1;Z;16;Z;03;16;Z;Z;Z;21;2;2;2;Z;1;2;1;1;1;4;4;4,02306147485403;ZZZZZZZZZ;1;1;1;4;M;22;32;AZ;AZ;00;04;2;2;0;1;2;4;1;00;Z;54;2;ZZ;1;32;2;10;2;11;111;11;11;1;2;ZZZZZZ;1;2;1;4;41;2;Z
2             1601;1;8;012;14;011;010;1996;03;3;ZZZZZ;2;Z;Z;Z;1;0;Z;4;Z;Z;6;2;8;Z;16;Z;ZZ;16;Z;Z;Z;ZZ;1;2;2;2;Z;2;1;1;1;4;4;4,02306147485403;ZZZZZZZZZ;3;3;3;1;M;11;11;ZZ;ZZ;00;04;2;2;0;1;2;4;1;14;Z;54;2;ZZ;1;32;Z;10;2;23;230;11;11;Z;Z;ZZZZZZ;1;2;1;4;41;2;Z
3             1601;1;8;006;05;005;005;2002;03;3;ZZZZZ;2;Z;Z;Z;1;0;Z;4;Z;Z;6;2;8;Z;16;Z;ZZ;16;Z;Z;Z;ZZ;1;2;2;2;Z;2;1;1;1;4;4;4,02306147485403;ZZZZZZZZZ;3;3;3;1;M;11;11;ZZ;ZZ;00;04;2;2;0;1;2;4;1;14;Z;54;2;ZZ;1;32;Z;10;2;23;230;11;11;Z;Z;ZZZZZZ;1;2;1;4;41;2;Z
4            1601;1;8;047;54;046;045;1961;03;2;ZZZZZ;2;Z;Z;Z;1;0;Z;4;Z;Z;6;1;6;Z;16;Z;14;974;Z;Z;Z;16;2;2;2;Z;2;2;4;1;1;4;4;4,02306147485403;ZZZZZZZZZ;2;2;2;1;M;22;32;MN;GU;14;04;2;2;0;1;2;4;1;14;Z;54;2;ZZ;2;32;1;10;2;11;111;11;11;1;4;ZZZZZZ;1;2;1;4;41;2;Z
5             1601;2;9;053;54;052;050;1958;02;1;ZZZZZ;2;Z;Z;Z;1;0;Z;2;Z;Z;2;1;2;Z;16;Z;12;87;Z;Z;Z;22;2;1;2;Z;1;2;3;1;1;2;2;4,21707670353782;ZZZZZZZZZ;1;1;1;2;M;21;40;GZ;GU;00;07;0;0;0;0;0;2;1;00;Z;54;2;ZZ;1;30;2;10;3;11;111;ZZ;ZZ;1;1;ZZZZZZ;2;2;1;4;42;1;Z
Run Code Online (Sandbox Code Playgroud)

import r large-data ff

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

这个错误是什么意思"使用tabplot包时if(any(B <1))停止("B太小")的错误"

我找到了tabplot包,可视化大数据库.我使用下面的代码运行它,但我在不同的数据帧上得到此错误:

"Error in if (any(B < 1)) stop("B too small") : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In bbatch(n, as.integer(BATCHBYTES/theobytes)) : NAs introduced by coercion"
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

dat <- read.table(text = " birds    wolfs     snakes
                     3        9         7
                     3        8         4
                     1        2         8
                     1        2         3
                     1        8         3
                     6        1         2
                     6        7         1
                     6        1         5
                     5        9         7
                     3        8         7
                     4        2         7
                     1        2         3
                     7        6         3
                     6        1         1
                     6 …
Run Code Online (Sandbox Code Playgroud)

r ff

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

如何用r语言处理50GB的大型csv文件?

我在这里的"大数据流程"中比较新,希望能找到一些关于如何处理50 GB csv文件的建议.目前的问题如下:

表看起来像:

ID,Address,City,States,... (50 more fields of characteristics of a house)
1,1,1st street,Chicago,IL,...
# the first 1 is caused by write.csv, they created an index raw in the file
Run Code Online (Sandbox Code Playgroud)

我想找到属于加利福尼亚州旧金山的所有行.它应该是一个简单的问题,但csv太大了.

我知道我有两种方法在R中执行它,另一种方法是使用数据库来处理它:

(1)使用R的ffdf包:

自上次保存文件以来,它使用的是write.csv,它包含所有不同的类型.

all <- read.csv.ffdf(
  file="<path of large file>", 
  sep = ",",
  header=TRUE, 
  VERBOSE=TRUE, 
  first.rows=10000, 
  next.rows=50000,
  )
Run Code Online (Sandbox Code Playgroud)

控制台给了我这个:

Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,  
: vmode 'character' not implemented
Run Code Online (Sandbox Code Playgroud)

通过在线搜索,我找到了几个不适合我的案例的答案,我无法理解如何将"字符"转换为他们提到的"因素"类型.

然后我尝试使用read.table.ffdf,这更是灾难.我找不到那个坚实的指南.

(2)使用R的readline:

我知道这是另一种好方法,但找不到有效的方法来做到这一点.

(3)使用SQL:

我不知道如何将文件传输到SQL版本,以及如何处理这个,如果有一个很好的指南我想尝试.但总的来说,我想坚持使用R.

感谢您的回复和帮助!

sql csv r ff

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

删除行ff包

一段时间以来我一直在使用ff包来处理大数据.我使用的R对象有大约130,000,000行和14列.其中两个列,温度和降水值缺少值"NA",因此我需要删除这些行以继续我的工作.我一直试图像在普通的R对象中那样做:

data<-data[!is.na(data$temp),]
Run Code Online (Sandbox Code Playgroud)

但我一直收到一个错误:

Error: vmode(index) == "integer" is not TRUE
Run Code Online (Sandbox Code Playgroud)

有没有人能够删除ffdf对象中的行?我很感激任何帮助.

r ff ffbase

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

将ff对象转换为data.frame

我正在处理大型矩阵和ff包。我正在加载一个ff对象,我想用它来计算crps(分数)。

例如,我有一个ff_matrix(称为Mat,具有25行和7303列),它是降水预测(7303代表天数(约20年),而25是一天的25次降水模拟)。我还有一个ff_array,其中包含这20年的观测值(称为Obs,具有7303值)。

使用ensembleBMA软件包,我想计算CRPS。我需要将ff_matrix和ff_array放在“ ensembleBMA”对象中(实际上这是一个data.frame)。

对于此代码:

ensembleBMA(Mat,Obs)
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class 'c("ff_matrix", "ff_array", "ff")' into a data.frame
Run Code Online (Sandbox Code Playgroud)

我尝试了其他选项,例如:

as.data.frame(Mat)
as.matrix(Mat)
transform.ffdf(as.ffdf(Mat))
Run Code Online (Sandbox Code Playgroud)

我总是有这些错误:

Error in as.data.frame.default(Mat_Ptot_212_1) : cannot automatically convert class  'c("ff_matrix", "ff_array", "ff")' into a data frame (data.frame)
Run Code Online (Sandbox Code Playgroud)

要么

opening ff /tmp/RtmpWrlY4n/clone9d3376b435.ff Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,  : write error
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?

r matrix bigdata dataframe ff

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

如何在 extconf.rb 中为 SWIG 正确包含库路径和其他标志?

假设我要用命令编译一个 C 文件

g++ a.cpp  -I/usr/local/gr/include -L/usr/local/gr/lib -lGR -lm -Wl,-rpath,/usr/local/gr/lib
Run Code Online (Sandbox Code Playgroud)

我将如何在 SWIG 中定义 extconf.rb 文件,以便它不会忽略链接器路径?
这是我当前的 extconf.rb 文件。

require 'mkmf'
system('swig -c++ -ruby example.i') or abort
$CXXFLAGS += " -I/usr/local/gr/include -L/usr/local/gr/lib -lGR -lm -Wl,-rpath,/usr/local/gr/lib "
create_makefile('example')
Run Code Online (Sandbox Code Playgroud)

它忽略带有错误的链接器标志

clang: warning: -lGR: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -Wl,-rpath,/usr/local/gr/lib: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-L/usr/local/gr/lib' [-Wunused-command-line-argument]
Run Code Online (Sandbox Code Playgroud)

ruby binding swig ff

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

R中的ff包:如何将数据从一个驱动器移动到另一个驱动器,并更改文件名

我正在与令人惊叹的ff和ffbase包密切合作.由于一些技术细节,我必须使用我的R会话在我的C:驱动器中工作.完成后,我将生成的文件移动到我的P:驱动器(在Windows中使用剪切/粘贴,而不是使用ff).

问题是当我加载ffdf对象时:

load.ffdf("data") 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Error: file.access(filename, 0) == 0 is not TRUE
Run Code Online (Sandbox Code Playgroud)

这没关系,因为没有人告诉ffdf对象它被移动了,但是尝试:

filename(data$x) <- "path/data_ff/x.ff"
Run Code Online (Sandbox Code Playgroud)

要么

pattern(data) <- "./data_ff/"
Run Code Online (Sandbox Code Playgroud)

没有帮助,给出错误:

Error in `filename<-.ff`(`*tmp*`, value = filename) : 
ff file rename from 'C:/DATA/data_ff/id.ff' to 'P:/DATA_C/data_ff/e84282d4fb8.ff' failed. 
Run Code Online (Sandbox Code Playgroud)

有没有办法"改变"到ffdf对象文件新位置的路径?谢谢 !!

r ff

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

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
查看次数

标签 统计

ff ×9

r ×8

csv ×2

large-data ×2

bigdata ×1

binding ×1

dataframe ×1

ffbase ×1

import ×1

matrix ×1

memory-management ×1

ruby ×1

sql ×1

swig ×1