何时需要使用引号来引用数据框中的列,何时可以不使用引号?

问题描述 投票:0回答:1

我在使用 R 方面还很陌生,所以我可能没有命名,所以事情是正确的;-) 我想绘制三个不同线性模型的结果。为此,我循环遍历列名称,并将其保存在带引号的向量中。

lambdas <- c("lambda_of_antibody1", "lambda2", "lambda3")

在我的循环中,我计算线性模型并且必须使用

get()
,以便我可以访问列名称。然后我使用
sjPlot::plot_model
绘制回归线,但是,我收到错误消息:“模型中未找到某些指定的
terms
。可能拼写错误?”。

    for (i in seq_along(lambdas)) {
        fit <- lm(sd_cplx ~ get(lambdas[i]), data = df_dpcrsum)
        plt <- sjPlot::plot_model(
            fit,
            type = "pred",
            terms = lambdas[i]
        ) +
            geom_point(
                data = df_dpcrsum,
                aes(
                    x = get(lambdas[i]),
                    y = sd_cplx
                )
            )

        plots[[i]] <- plt
    }

我的问题是,如何正确访问数据框的列?这可能很简单,但我找不到解决方案。

我意识到模型中的术语名称是 get(lambdas[i]) 而不是实际的列名称。所以我尝试使用

names(fit$coefficients)
重命名系数。但我收到同样的错误消息。可能有一种使用
enquo()
的方法,但恐怕我缺少对函数背后更深入的理解。因此,我将非常感谢您的帮助!如果我提供了足够的信息或者遗漏了一些重要的细节,请告诉我。

r dataframe lazy-evaluation tidyeval r-colnames
1个回答
0
投票

由于您没有提供任何样本数据,因此无法验证。试试这个(假设你的数据框名为 df):

plots <- list()

for (i in seq_along(lambdas)) {
  fit <- lm(sd_cplx ~ df[[lambdas[i]]], data = df)
  plt <- sjPlot::plot_model(
    fit,
    type = "pred",
    terms = lambdas[i]  ### need to verify the terms in your dataframe
  )   +
    geom_point(
      data = df,
      aes(
        x = .data[[lambdas[i]]],
        y = sd_cplx
      )
    )
  
  plots[[i]] <- plt
}
© www.soinside.com 2019 - 2024. All rights reserved.