【问题标题】:Capture the name of an input value in a function捕获函数中输入值的名称
【发布时间】:2021-09-30 21:22:15
【问题描述】:

我想知道是否有办法在下面的函数中捕获参数study_id 的输入。

例如,下面示例中我想要的输出是:"study"。这可能吗?

library(rlang)

foo <- function(data, study_id){
  
  study_id <- ensym(study_id)
  
# names(data[study_id]) # I tried this without success
}
  
# EXAMPLE OF USE:

dat = data.frame(a=1:3,study=4:6)

foo(dat, study_id = study)

# DESIRED OUTPUT:

> [1] "study"

【问题讨论】:

    标签: r dataframe function tidyverse rlang


    【解决方案1】:

    我们可以使用as_string

    foo <- function(data, study_id){
      
      study_id <- ensym(study_id)
      
      as_string(study_id)
    }
    

    -测试

    foo(dat, study_id = study)
    [1] "study"
    

    base R 中,这可以通过deparse/substitute 完成

    foo1 <- function(data, study_id) deparse(substitute(study_id))
    foo1(dat, study_id = study)
    [1] "study"
    

    【讨论】:

    • 在tidyverse生态系统中~的含义如下:struct == "HCS" ~ "CMVE"?我认为它的意思是 OR,对吗?
    • @rnorouzian 看来您的~ 已应用于case_when。在这种情况下,它将只是一个双边公式表达式 - 表示〜左侧的逻辑表达式,值为“CMVE”。对于其他情况,即map(1:5, ~ ),它是一个 lambda 函数,即动态创建的function(x) x
    猜你喜欢
    • 2018-10-09
    • 2012-10-06
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2022-11-26
    • 1970-01-01
    相关资源
    最近更新 更多