gpt4 book ai didi

r - 有没有办法使用字符串变量向 dplyr 函数提供参数?这个叫什么?

转载 作者:行者123 更新时间:2023-12-02 01:24:40 26 4
gpt4 key购买 nike

在 R 中,有没有一种方法可以将参数(?)提供给这样的函数:

df <- data.frame( ID = c(10, 20),
strand = c(1,-1),
type = c("pos", "neg") )

test1 <- "strand == \"-1\""
test2 <- "type == \"pos\""

df %>% dplyr::filter(test1)
df %>% dplyr::filter(test2)

我的最终目标是一个函数,根据用户的偏好,使用一列或另一列过滤 df:

strand_or_type <- function(df, strand_or_type) { 
df <- data.frame( ID = c(10, 20),
strand = (1,-1),
type = ("pos", "neg") )

if(strand_or_type == "strand"){
col <- "strand == \"-1\""
} else if(strand_or_type == "type") {
col <- "type == \"pos\""
}

df %>% dplyr::filter(col)
}

也许有更好的方法来描述这一点,如果有的话会尽快更新。抱歉。

最佳答案

我们可以使用parse_expr

library(dplyr)
df %>%
dplyr::filter(eval(rlang::parse_expr(test1)))

作为函数

strand_or_type <- function(df, strand_or_type) { 
str1 <- switch(strand_or_type,
strand = "strand == \"-1\"",
type = "type == \"pos\"")
df %>%
filter(eval(rlang::parse_expr(str1)))

}

-测试

 strand_or_type(df, "strand")
ID strand type
1 20 -1 neg
> strand_or_type(df, "type")
ID strand type
1 10 1 pos

或者我们可以不创建字符串并进行计算

strand_or_type <- function(df, strand_or_type) { 
to_filter <- switch(strand_or_type,
strand = -1,
type = "pos")
df %>%
filter(if_any(all_of(strand_or_type), ~ .x == to_filter))
}

-测试

> strand_or_type(df, "strand")
ID strand type
1 20 -1 neg
> strand_or_type(df, "type")
ID strand type
1 10 1 pos

关于r - 有没有办法使用字符串变量向 dplyr 函数提供参数?这个叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75062372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com