Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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脚本转换为perl?_R_Perl_Ld - Fatal编程技术网

将R脚本转换为perl?

将R脚本转换为perl?,r,perl,ld,R,Perl,Ld,我有一个R脚本,我想用它来解析一个文件并从中获取一些信息,但是这个文件是44GB 有人能帮我用一种读文件速度更快的编程语言来写吗 脚本非常简单: ld <- read.table("plink-inter-chr---ld-window-r2-0.ld", header = T) ldv1 <- do.call(rbind, strsplit(as.character(ld[,1]), "_")) ldv4 <- do.call(rbind, strsplit(as.chara

我有一个R脚本,我想用它来解析一个文件并从中获取一些信息,但是这个文件是44GB

有人能帮我用一种读文件速度更快的编程语言来写吗

脚本非常简单:

ld <- read.table("plink-inter-chr---ld-window-r2-0.ld", header = T)
ldv1 <- do.call(rbind, strsplit(as.character(ld[,1]), "_"))
ldv4 <- do.call(rbind, strsplit(as.character(ld[,4]), "_"))
ld <- matrix(c(ldv1[,2], ldv4[,2], ld[,2], ld[,5], ld[,7]), ncol=5)
N <- 30
within <- numeric(N)
between <- numeric(N)
for(i in 1:N){
within[i] <- mean(as.numeric(ld[which(ld[,1] == i & ld[,2] == i),5]))
between[i] <- mean(as.numeric(ld[which(ld[,1] == i & ld[,2] != i),5]))
}
table <- matrix(c(within, between), ncol=2)
write.table(table, file = "within-between.tab", quote = FALSE, row.names = FALSE, col.names = FALSE)
谢谢你的帮助,
Adrian

在R代码中,有些地方你在浪费时间,而且速度变慢了(因此可能会大大加快),包括:

您正在读取字符串,将其转换为因子,然后将其转换回字符串。查看
read.table
stringsAsFactors
参数,了解如何避免这两种转换

在执行此操作时,可以通过在
read.table
中指定
colClasses
来提高速度,这样函数就不需要浪费时间猜测每列应该是什么

在执行字符串拆分后,您可以将所有内容合并到一起,但只使用每个结果矩阵中的一列。只获取第一个“”后的数字(或非“”的序列)可能会更快,您可以使用gsubfn包中的
stripply
函数,或者只使用
regexpr
regmatches
函数

使用
cbind
函数创建ld矩阵可能比使用
matrix
进行串联然后重新缠绕要快。实际上,为什么要首先创建矩阵,您不使用其中的两列,而其他列是单独使用的。这还会将数字转换为稍后需要转换回的字符

在循环中运行
as.numeric
是低效的,您不断地反复转换相同的值,只需在循环之前对整个矩阵执行单个
as.numeric

您不需要调用
which
,因为订阅可以在
which
上正常工作


修正上述问题,看看结果的速度有多快。

对于那些R不流利的人,你能举个例子说明输出应该是什么样子吗?@AdrianP:你的“有人能帮我用一种读文件速度更快的编程语言写这篇文章”是什么意思?你懂什么语言,需要什么帮助?我想这与你的工作有关,如果你利用他人的努力并为他人的努力获得报酬,那将是非常错误的。我正在攻读我的科学硕士学位。我确实因为做硕士而得到奖学金,但这不是传统意义上的就业。我懂一点perl和python。
 CHR_A         BP_A SNP_A  CHR_B         BP_B SNP_B           R2           DP
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         2210    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         2419    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         2524    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         2587    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         2799    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         2947    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         3142    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         3178    .            1            1
NODE_1_length_193190_coverage_19.3759_GC_24.97          919    . NODE_1_length_193190_coverage_19.3759_GC_24.97         3261    .            1            1