【发布时间】:2020-08-06 20:04:38
【问题描述】:
我有两个数据框。一个有两列,另一个有三列。第一个数据框具有 SNP 名称及其位置。第二个数据框包含三列,列中包含基因名称以及基因的开始和结束坐标。
我有兴趣根据边界执行连接。如果 SNP 落在基因边界内,则返回它
dt_snp<-data.table("SNP"=c(paste("SNP",seq(1:10),sep="")),
"BP"=c(1100, 89200, 2500, 33000, 5500, 69500, 12000,8800, 23200, 27000 )) ## SNP data
dt_gene<-data.table("GENE"=c("GENE1","GENE2","GENE3","GENE4","GENE5"),
"START"=c(1000,2100,5000,40000,23000), "END"=c(2000,3000,9000,45000,30000)) ## Gene data
## do a join using data.table
snp_withingenes<-dt_snp[dt_gene, c("SNP","BP","GENE","START","END"), on=.(BP>=START, BP<=END), nomatch=0] # inner join
我得到了想要的结果,但是当我在存储在 R 包中的 R 脚本中执行此任务时,我收到. 运算符的警告。警告如下:
function_small: no visible global function definition for ‘.’
Undefined global functions or variables:
.
因此,我想使用foverlaps,但我很难理解并使用它达到预期的效果。这对我来说是违反直觉的
foverlaps(dt_snp,dt_gene, by.x=c("SNP","BP"), by.y=c("GENE","START","END"), nomatch=NA, type="any")
Error in foverlaps(dt_snp, dt_gene, by.x = c("SNP", "BP"), by.y = c("GENE", :
The first 3 columns of y's key must be identical to the columns specified in by.y.
我应该如何获得所需的输出?
data.table_1.13.0R v4.0windows平台
R v4.0rmarkdown_2.3devtools_2.3.1UNIX 平台上的 . 运算符来自 devtools 的 check 烦人
【问题讨论】:
-
难道你不能用
on=list(BP>=START, BP<=END)替换on=.(BP>=START, BP<=END)并完成它吗? -
非常感谢。是的,
list完成了这项工作。check发出的.警告已经疯狂了 4 个多小时,非常感谢您的回复和foverlaps的示例 -
似乎您的内部连接没有给出正确的 BP 值,而是 dt_gene 的 START 坐标...
-
...在编辑中修复了这个问题
-
哦,哇,刚刚注意到了。谢谢~~!!这是为什么?谢谢你抓住那个。如何在不使用您在解决方案中提供的
BP2列的情况下修复它?
标签: r data.table devtools