mutate 在执行计算时不添加正确的列名
mutate not adding the correct column name when performing calculation
当我尝试使用函数的输入在函数中添加列时,添加的列名称错误。这是数据示例:
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]
在控制台中,它工作得很好。
有人知道这里发生了什么吗?
使用 [, 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]
returns一个one-column数据框
AllGlut1[, colm]
returns 如果 AllGlut1
是一个数据框, 或 一个 one-column tibble 如果 AllGlut1
是小标题
AllGlut1[[colm]]
总是 returns 向量(pull(AllGlut1, colm)
或 AllGlut1[,colm, drop=TRUE]
也是如此)
您似乎混合使用了 base-R 和 tidyverse 方法,这可能会造成混淆...
当我尝试使用函数的输入在函数中添加列时,添加的列名称错误。这是数据示例:
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]
在控制台中,它工作得很好。
有人知道这里发生了什么吗?
使用 [, 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]
returns一个one-column数据框AllGlut1[, colm]
returns 如果AllGlut1
是一个数据框, 或 一个 one-column tibble 如果AllGlut1
是小标题AllGlut1[[colm]]
总是 returns 向量(pull(AllGlut1, colm)
或AllGlut1[,colm, drop=TRUE]
也是如此)
您似乎混合使用了 base-R 和 tidyverse 方法,这可能会造成混淆...