0

当我尝试使用函数的输入在函数中添加列时,会添加一个名称错误的列。以下是数据示例:

AllGlut1 <- data.frame(Date = c("11/1/2021", "11/2/2021", "11/3/2021"), Row = c(3, 6, 8), d.15N.14N = c(-4.593, -4.427, -4.436))

known <- "d15N_known"
RefMaterials <- data.frame(d15N_known = c(6.485, 2.632, 9.235), d13C_known = c(-21.523, -23.344, -24.892))

colm <- "d.15N.14N"

driftcorr <- function(colm, known, df){

AllGlut1 <- AllGlut1 %>% mutate(res_drift = RefMaterials[1,known] - AllGlut1[colm])

return(AllGlut1)
}

results <- driftcorr(colm, known, AllGlut1)

当我这样做时:

res_drift <- RefMaterials[1,known] - AllGlut1[colm]

在控制台中,它工作得很好。

有人知道这里发生了什么吗?

4

1 回答 1

2

使用[, colm]而不是[colm]引用 的列AllGlut1

driftcorr <- function(colm, known, df){
  AllGlut1 <- AllGlut1 %>%
    mutate(res_drift = RefMaterials[1,known] - AllGlut1[, colm])
  return(AllGlut1)
}

或者,正如@Martin Gal 所说,使用RefMaterials[1,known] - !!sym(colm)(我检查过,它确实有效......)

  • AllGlut1[colm]返回一列数据框
  • AllGlut1[, colm]AllGlut1如果是数据框,返回向量;如果是小标题,则返回AllGlut1单列小标题
  • AllGlut1[[colm]]总是返回一个向量(和pull(AllGlut1, colm)or一样AllGlut1[,colm, drop=TRUE]

看起来您正在使用 base-R 和 tidyverse 方法的混合,这可能会让人感到困惑......

于 2021-11-02T14:21:01.053 回答