函数不';t将调用参数视为R中的值

函数不';t将调用参数视为R中的值,r,function,dataframe,R,Function,Dataframe,这是我的职责 test_gene <- function(gene, gene_data, gene_col) {with(gene_data, gene_data[(get(gene_col) == gene),]) } 我想从我的数据框(tibble)中筛选特定的基因,但它在函数调用中不起作用。如果我像这样在控制台中输入它,它就会工作。这就好像R不会将调用参数gene作为一个值来计算。我尝试了filter(),但也不起作用 with(df, df[(gene == "CXCR4")

这是我的职责

test_gene <- function(gene, gene_data, gene_col) 
{with(gene_data, gene_data[(get(gene_col) == gene),])
}
我想从我的数据框(tibble)中筛选特定的基因,但它在函数调用中不起作用。如果我像这样在控制台中输入它,它就会工作。这就好像R不会将调用参数gene作为一个值来计算。我尝试了filter(),但也不起作用

with(df, df[(gene == "CXCR4"),])

test_gene(gene = "CXCR4",gene_data = df, gene_col = "gene")
#一个tible:48 x 15
样本名称基因cp cp图delta cp delta cp图delta cp控制…delta cp delta cp lfc基因组
1 c1_50 CD24 31.7 31.7 8.09 8.09 8.51-0.418 0.418 1.34目标
2 c1_90 CD24 32.0 32.0 8.06 8.06 8.51-0.447 0.447 1.36目标
3 c2_50 CD24 32.1 32.1 8.60 8.60 8.51 0.0877-0.0877 0.941目标
4 c2_90 CD24 31.2 31.2 8.62 8.62 8.51 0.110-0.110 0.927目标
5 c3_50 CD24 31.6 31.6 8.61 8.61 8.51 0.105-0.105 0.930目标
6 c3_90 CD24 31.8 31.8 9.07 9.07 8.51 0.563-0.563 0.677目标
7 sp1_50 CD24 32.9 32.9 7.43 7.43 8.51-1.08 1.08 2.12目标
8 sp1_90 CD24 34.7 34.7 7 7.70 8.51-0.806 0.806 1.75目标
9 sp2_50 CD24 32.3 32.3 6.75 6.75 8.51-1.76 1.76 3.39目标
10 sp2_90 CD24 33.1 33.1 7.46 7.46 8.51-1.05 1.05 2.07目标
#…又有38行和4个变量:样本组代码、petri数、合流、,
#样本组

您最初的试验离目标不远。这只是一个组织问题。
基因
字符串被搞糊涂了。考虑

df <-structure(list(sample_name = structure(1:10, .Label = c("c1_50", 
"c1_90", "c2_50", "c2_90", "c3_50", "c3_90", "sp1_50", "sp1_90", 
"sp2_50", "sp2_90"), class = "factor"), gene = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("CD24", "CXCR4"
), class = "factor")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "0"))

欢迎来到stackoverflow。你能提供你的数据样本并粘贴抛出的准确错误吗?嗨!它不会抛出错误,它只是返回数据帧,因为没有键入任何内容,这是否在函数中起作用:
gene\u data%>%filter(!!rlang::sym(gene\u col)==gene)
Nope,不起作用:/我认为问题在于您有两个名为
gene
的对象。尝试将函数中的
gene
参数重命名为例如
gene\u name
,然后再次尝试我之前的建议。。。这样行吗?
# A tibble: 48 x 15
   sample_name gene     cp cp_plot delta_cp delta_cp_plot delta_cp_contro… delta_delta_cp     lfc    fc gene_group
   <chr>       <chr> <dbl>   <dbl>    <dbl>         <dbl>            <dbl>          <dbl>   <dbl> <dbl> <fct>     
 1 c1_50       CD24   31.7    31.7     8.09          8.09             8.51        -0.418   0.418  1.34  target    
 2 c1_90       CD24   32.0    32.0     8.06          8.06             8.51        -0.447   0.447  1.36  target    
 3 c2_50       CD24   32.1    32.1     8.60          8.60             8.51         0.0877 -0.0877 0.941 target    
 4 c2_90       CD24   31.2    31.2     8.62          8.62             8.51         0.110  -0.110  0.927 target    
 5 c3_50       CD24   31.6    31.6     8.61          8.61             8.51         0.105  -0.105  0.930 target    
 6 c3_90       CD24   31.8    31.8     9.07          9.07             8.51         0.563  -0.563  0.677 target    
 7 sp1_50      CD24   32.9    32.9     7.43          7.43             8.51        -1.08    1.08   2.12  target    
 8 sp1_90      CD24   34.7    34.7     7.70          7.70             8.51        -0.806   0.806  1.75  target    
 9 sp2_50      CD24   32.3    32.3     6.75          6.75             8.51        -1.76    1.76   3.39  target    
10 sp2_90      CD24   33.1    33.1     7.46          7.46             8.51        -1.05    1.05   2.07  target    
# … with 38 more rows, and 4 more variables: sample_group_code <fct>, petri_number <fct>, confluence <fct>,
#   sample_group <fct>
df <-structure(list(sample_name = structure(1:10, .Label = c("c1_50", 
"c1_90", "c2_50", "c2_90", "c3_50", "c3_90", "sp1_50", "sp1_90", 
"sp2_50", "sp2_90"), class = "factor"), gene = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("CD24", "CXCR4"
), class = "factor")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "0"))
test_gene <- function(gene_data, col, val) {
## Data Definition
## gene_data  . a data.frame
## col        . a string representing a column name in gene_data
## val        . a string representing a value of col in gene_data
with(gene_data, gene_data[get(col) == val,])
}
test_gene(col="gene",val = "CXCR4",gene_data = df)

##   sample_name  gene
## 0      sp2_90 CXCR4