【问题标题】:Passing column name as argument in function within pipes在管道内的函数中将列名作为参数传递
【发布时间】:2021-11-26 09:56:08
【问题描述】:

我正在尝试通过将变量名作为参数传递来编写函数。然后在下游管道中使用它来改变变量。

使用更经典但可能有点笨拙的方法我能够做到这一点:

var = "Sepal.Width"

scale_fun1 = function(dat,var) {
  
  dat[,"new_var"] = dat[,var]*100
  
  return(dat)
  
}

scale_fun1(iris,var)

我认为使用管道会很简单,但事实证明它比我认为的更困难,因为当函数传递管道 var 时,它不会按应有的方式解析,这会导致二进制运算符错误的非数字参数。请问这个怎么解决?

var = "Sepal.Width"

scale_fun2 = function(dat,var) {
  
  iris %>% dplyr::mutate(new_variable = var * 100)
  
}

scale_fun2(iris,var)

【问题讨论】:

    标签: function dplyr tidyverse


    【解决方案1】:

    您需要使用值得快速阅读的非标准评估。在这种情况下,您很可能需要在 mutate 行中将 !! 放在 var 前面。

    这是行:

    mutate(new_variable = !!sym(var) * 100)
    

    【讨论】:

    • 嗨。感谢您的输入。我将阅读非标准评估。我试过了:iris %>% dplyr::mutate(new_variable = !!var * 100) 但没有用。
    • 抱歉,试试我的编辑
    • 谢谢。这样可行。我真的需要知道这些东西......!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2020-05-03
    • 2019-03-26
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多