R 线性回归函数调用中如何动态引用数据集

R 线性回归函数调用中如何动态引用数据集,r,linear-regression,R,Linear Regression,假设我有这样一个函数: data("mtcars") ncol(mtcars) test <- function(string){ fit <- lm(mpg ~ cyl, data = string) return(fit) } 但是,我得到一个错误: eval(predvars、data、env)中出错:的'envir'参数无效 键入“字符” 我尝试过使用eval和parse的组合,但没有效

假设我有这样一个函数:

data("mtcars")
ncol(mtcars)

test <- function(string){
      fit <- lm(mpg ~ cyl,
                     data = string)
      return(fit)
}
但是,我得到一个错误:

eval(predvars、data、env)中出错:的'envir'参数无效 键入“字符”


我尝试过使用
eval
parse
的组合,但没有效果。有什么想法吗?

请尝试对代码进行以下细微更改:

#Code
test <- function(string){
  fit <- lm(mpg ~ cyl,
            data = eval(parse(text=string)))
  return(fit)
}
#Apply
test("mtcars")

请尝试对代码进行以下细微更改:

#Code
test <- function(string){
  fit <- lm(mpg ~ cyl,
            data = eval(parse(text=string)))
  return(fit)
}
#Apply
test("mtcars")
您可以使用
get()
按名称搜索对象

test <- function(string){
  fit <- lm(mpg ~ cyl, data = get(string))
  return(fit)
}

test("mtcars")

# Call:
# lm(formula = mpg ~ cyl, data = get(string))
# 
# Coefficients:
# (Intercept)          cyl  
#      37.885       -2.876 
您可以使用
get()
按名称搜索对象

test <- function(string){
  fit <- lm(mpg ~ cyl, data = get(string))
  return(fit)
}

test("mtcars")

# Call:
# lm(formula = mpg ~ cyl, data = get(string))
# 
# Coefficients:
# (Intercept)          cyl  
#      37.885       -2.876 

否,在此处使用
get
eval(parse())
不用于此目的(通常应避免使用,有效用例很少)。调试和维护使用
eval(parse())
的代码是一场噩梦。它也很慢。不,在这里使用
get
eval(parse())
不用于此目的(通常应避免使用,有效用例很少)。调试和维护使用
eval(parse())
的代码是一场噩梦。它也很慢。
test <- function(string){
  fit <- lm(mpg ~ cyl, data = get(string))
  fit$call$data <- as.name(string)
  return(fit)
}

test("mtcars")

# Call:
# lm(formula = mpg ~ cyl, data = mtcars)
# 
# Coefficients:
# (Intercept)          cyl  
#      37.885       -2.876