生成R函数从新对象中过滤数据



我正在尝试开发一个新的对象(用于生物信息学),所以我想从对象的一些元素中提取信息,我想创建一个类似于dplyr的filter的函数。对象有一个数据框架,所以我想从中过滤信息,但问题是data.frame的一些列总是存在,但有些不是,所以我想创建一个函数,使用不总是存在的列提取信息。

类似:

my_function(object, parametersXYZ){
data <- object@gene_table
#generate the filter 
result <- filter(data, parametersXYZ)
return(results)
}
在这个意义上,parametersXYZ对应于逻辑运算符(==, !=, %in%)和元素要过滤,那么函数将像

一样使用
my_function(myobject, genes == “rtxA”)

所以函数将过滤所有rtxA列中的元素. 我在找例子,但我只是没有找到它,所以我试着检查过滤器的代码在dplyr上,但我不知道如何实现它!!

这是data.frame

的一个例子
myobject[["gene_table"]] %>% head()
cluster         qseqid    bp nseqs     sample gene   VF
1 cluster_00001 IOHEFJOD_02210 15627    20 Sample-001 rtxA rtxA
2 cluster_00001 CJMKIBHP_00364 15621    20 Sample-002 rtxA rtxA
3 cluster_00001 JEJKLKDJ_00421 15621    20 Sample-003 rtxA rtxA
4 cluster_00001 MOOCIOKH_00638 15621    20 Sample-004 rtxA rtxA
5 cluster_00001 HJJCNJPA_01986 15621    20 Sample-005 rtxA rtxA
6 cluster_00001 MDIJOING_00449 15621    20 Sample-006 rtxA rtxA

前4列总是存在,但其余的可以呈现不同的名称,甚至可以有任意数量的列,这些列是我的问题!!

任何手册、建议或想法非常感谢!!

有一种方法可以求值

my_function <- function(object, parametersXYZ){
filter(object@gene_table, {{parametersXYZ}})
}

-不使用object@gene_table

的测试
> my_function(iris, Species == "setosa") %>% head
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

在Base R中可以这样做:

my_function <- function(object, parametersXYZ){
par <- substitute(parametersXYZ)
dat <- object@gene_table
subset(dat, eval(par, dat))
}

相关内容

  • 没有找到相关文章

最新更新