将数值传递到使用dplyr的函数中

将数值传递到使用dplyr的函数中,r,dplyr,R,Dplyr,我正在尝试编写一个函数,用于过滤所有包含NA且调整后的pvalue低于某个阈值的行 代码 filter_results <- function(result, pvalue){ df <- as.data.frame(result) df<- df %>% filter(!is.na(padj)) %>% filter(padj< pvalue) return(df) } dds_res_filter

我正在尝试编写一个函数,用于过滤所有包含
NA
且调整后的
pvalue
低于某个阈值的行

代码

filter_results <- function(result, pvalue){
    df <- as.data.frame(result)
    df<- df %>%
        filter(!is.na(padj))  %>%
        filter(padj< pvalue)
    return(df)
}

dds_res_filtered_pvalue <- filter_results(dds_res_simple, 0.01)
问题


如何将数值传递到使用dplyr的函数中?

查看数据框的名称和列名,我猜您使用的是DESeq2。数据框中有一个名为pvalue的列,因此您必须使用另一个变量,否则它将使用筛选器()中的pvalue列:

现在我们修改您的函数,使用“截止”而不是pvalue:

filter_results <- function(result, cutoff){
    df <- as.data.frame(result)
    df<- df %>%
        filter(!is.na(padj))  %>%
        filter(padj< cutoff)
    return(df)
}

为了应用dplyr-y,您需要使用非标准评估function@Sotos我不这么认为,只有当列名传递给函数时才需要NSE。此处没有传递任何列名。@n您可以通过添加数据使此帖子可复制吗。这个函数在理想情况下应该可以工作。哦..错过了。我又冲进去了。认为pvalue是一列:)这里使用
库(tidyverse)没有问题;筛选结果(mtcars%>%变异(padj=cyl),8)
library(DESeq2)
library(dplyr)
set.seed(100)
dds = makeExampleDESeqDataSet(betaSD = 1)
dds = DESeq(dds)
dds_res_simple = results(dds)

colnames(dds_res_simple)
[1] "baseMean"       "log2FoldChange" "lfcSE"          "stat"          
[5] "pvalue"         "padj"   
filter_results <- function(result, cutoff){
    df <- as.data.frame(result)
    df<- df %>%
        filter(!is.na(padj))  %>%
        filter(padj< cutoff)
    return(df)
}
head(filter_results(dds_res_simple,0.05))

 baseMean log2FoldChange     lfcSE      stat       pvalue         padj
1  38.01463       1.714453 0.3723547  4.604353 4.137494e-06 6.173404e-05
2  70.35889       1.503615 0.3152131  4.770152 1.840868e-06 2.983475e-05
3  18.94027       1.558557 0.5314113  2.932864 3.358511e-03 1.635751e-02

max(filter_results(dds_res_simple,0.05)$padj)
0.04594662