Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.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 - Fatal编程技术网

R循环大数据

R循环大数据,r,R,我有一个大的数据集,我想运行一些代码对一件一件,因为它的大尺寸为我的电脑运行在一次过 这是我到目前为止的代码。。。 我的数据集有gene、MOUNT和count列 df <- read.table(file = "/Users/x/x.txt", header = TRUE, sep=",", fill=TRUE, comment.char = "") count_by_gen

我有一个大的数据集,我想运行一些代码对一件一件,因为它的大尺寸为我的电脑运行在一次过

这是我到目前为止的代码。。。 我的数据集有gene、MOUNT和count列

df <- read.table(file = "/Users/x/x.txt", 
                         header = TRUE, sep=",", fill=TRUE, comment.char = "")

count_by_gene <- 
  df %>%
  group_by(gene) %>%
  summarize(count = n())
df%
汇总(计数=n())

由于数据集太大,我无法导入。有没有办法一件一件地完成这项工作,并为每一件创建一个不同的表(按基因计数)?

您可以尝试从NCmisc包中使用file.split

library(NCmisc)
orig.dir <- getwd(); setwd(tempdir()); # move to temporary dir
file.name <- "x.txt"
writeLines(fakeLines(max.lines=1000),con=file.name)
new.files <- file.split(file.name,size=50)
unlink(new.files); unlink(file.name)
setwd(orig.dir) # reset working dir to original
库(NCmisc)

orig.dir您好,您只需加载
gene
列即可按
gene
计数。对于大数据框架,我还将指导您使用
data.table
软件包,该软件包在读取CSV和处理CSV时将更加高效。如果基因名称是字符串,那么将它们作为
因子
(存储为整数)加载将进一步减少内存占用

library(data.table)

# fread is data.table's read.table. It is also smart in detecting
# separators otherwise you can still provide them as parameters
dt <- fread("yourfile.txt", select="gene", stringAsFactors=TRUE)

# here we group by "gene" values and compute for each group the 
# count (using .N pseudo variable)
# the empty comma at the beginning means that we want all lines
count_by_gene <- dt[, by="gene", list(count = .N)]
库(data.table)
#fread是data.table的read.table。它在探测方面也很聪明
#分隔符,否则仍可以将其作为参数提供

dt这对您有帮助吗?如果整个数据集都存储在本地,那么
disk.frame
包可能会很有用。对不起,这对我没有帮助。我需要一件一件地处理它们。我尝试设置一个循环,并使用nrows和skip处理数据。就是无法让代码工作:/n您的数据有多大?多少行和多少列?大约10gb,7列这就是我做的。该文件仍然太大,无法一次性处理。我还想在某个时候将此数据帧与其他数据集合并。更新了我的答案以合并来自不同部分的结果
file_parts <- c("fic1.txt", "fic2.txt", .... )

# compute counts for each part
parts_counts <- lapply(file_parts, function(file) {
  dt <- fread(file, select="gene", stringAsFactors=TRUE)
  dt[, by="gene", list(count = .N)]
})

# merge part counts in a single table
merged_parts_counts <- rbindlist(parts_counts)

# then total count is sum of part counts
gene_counts <- merged_parts_counts[, by="gene", list(count=sum(count))]