我給出了兩個非常大的數據集,並且我一直在嘗試構建一個函數,該函數將從一個集合中找出某些關於其他數據的if子句的某些座標組。 我的問題是,我寫的功能很慢雖然我一直在閱讀某些問題類似的問題的答案,但我還沒有設法使其工作。
所以,如果我給出:向量化包含循環和if子句的搜索函數
>head(CTSS)
V1 V2 V3
1 chr1 564563 564598
2 chr1 564620 564649
3 chr1 565369 565404
4 chr1 565463 565541
5 chr1 565653 565697
6 chr1 565861 565922
和
> head(href)
chr region start end strand nu gene_id transcript_id
1 chr1 start_codon 67000042 67000044 + . NM_032291 NM_032291
2 chr1 CDS 67000042 67000051 + 0 NM_032291 NM_032291
3 chr1 exon 66999825 67000051 + . NM_032291 NM_032291
4 chr1 CDS 67091530 67091593 + 2 NM_032291 NM_032291
5 chr1 exon 67091530 67091593 + . NM_032291 NM_032291
6 chr1 CDS 67098753 67098777 + 1 NM_032291 NM_032291
對於從HREF數據集我想找到的前兩個值在起始列每個值CTSS數據集的第3列小於或等於,並將其保留在新的數據框中。
環路我寫道:
y <- CTSS[order(-CTSS$V3), ]
find_CTSS <- function(x, y) {
n <- length(x$start)
foo <- data.frame(matrix(0, n, 6))
for (i in 1:n)
{
a <- which(y$V3 <= x$start[i])
foo[i, ] = c(x$start[i], x$stop[i], y$V2[a[1]], y$V3[a[1]] , y$V2[a[2]], y$V3[a[2]])
}
print(foo)
}
我認爲*這是'data.table'可以大大加快的一件事情。 –
首先,你是指當前數據框順序中的第一個V3,還是你的意思是最低的兩個值,還是你的意思是最接近或等於開始的值?......或其他。我想我可以將Roman Lustrik的代碼作爲定義的基礎嗎? – John