【问题标题】:mutate not adding the correct column name when performing calculation执行计算时变异不添加正确的列名
【发布时间】:2021-12-17 01:28:01
【问题描述】:

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

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]

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

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

【问题讨论】:

  • 您的代码不完整,缺少三个右括号。编辑和修复这个问题很容易,但是这段代码与你的真实代码足够一致吗?
  • RefMaterials[1,known] - AllGlut1[colm] 应该是 RefMaterials[1,known] - !!sym(colm)(或类似的东西)。
  • 对不起,我添加了括号。它们在真实的代码中。我刚刚习惯在堆栈溢出中编写代码,因为这是我的第一篇文章。感谢您的耐心等待。
  • 顺便说一句,你的driftcorr 函数有点草率,伸手去寻找调用环境中的数据。通常最好将数据显式传递给函数以保留其“功能”范式。
  • @MartinGal 计算正常,只是列名显示为 d.15N.14N 而不是 res_drift。

标签: r function mutated


【解决方案1】:

使用[, 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 是一个数据框,AllGlut1[, colm] 返回一个向量,如果AllGlut1 是一个小标题,则返回一个单列小标题
  • AllGlut1[[colm]] 总是返回一个向量(pull(AllGlut1, colm)AllGlut1[,colm, drop=TRUE] 也是如此)

您似乎混合使用了 base-R 和 tidyverse 方法,这可能会让人感到困惑......

【讨论】:

  • 将逗号放在正确的位置可以解决问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-11-16
  • 2016-09-06
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多