在R用户定义函数中传递数据参数

时间:2020-02-10 01:43:16

标签: r function arguments user-defined-functions

对于R中的lm()之类的函数,您将“ data”参数传递给该函数(通常是一个数据帧),然后R通过名称知道所有列,而不是引用它们。因此,区别在于x=column而不是x=df$column形式的引用。那么如何在自己的用户定义函数中使用相同的方法?

一个简单的例子:

library(tidyverse)

df <- tibble(x=1:100,y=x*(1+rnorm(n=100)))

test_corr <- function(x,y) {
  cor(x,y) %>% return()
}

# Right now I would do this
test_corr(df$x,df$y)

# I want to be able to do this
test_corr(data=df, x, y)

2 个答案:

答案 0 :(得分:2)

由于您正在使用tidyverse函数,因此对于这种类型的任务使用整洁的评估是有意义的。为此功能,您可以

test_corr <- function(data, x, y) {
  quo( cor({{x}}, {{y}}) ) %>% 
    rlang::eval_tidy(data=data)
}

test_corr(df, x, y)

首先,我们保证要构建要求值的表达式,然后使用{{ }}(拥抱)语法将传递给函数的变量名插入表达式中。然后,我们在您为eval_tidy提供的data.frame的上下文中评估该安全性。

您可能还对tidyselect封装插图感兴趣,其中讨论了更多选项。

答案 1 :(得分:0)

您可以使用var connectionString = new ConnectionString(Configuration.GetConnectionString("DefaultConnection")); services.AddHealthChecks().AddNpgSql(connectionString.Value);

reformulate