如何使用数据框中的变量创建函数

Mir*_*Plà 5 variables r function dataset

我确定这个问题有点愚蠢(抱歉)......我正在尝试使用我存储在 Dataframe 中的不同变量来创建一个函数。功能是这样的:

mlr_turb <- function(Cond_in, Flow_in, pH_in, pH_out, Turb_in, nm250_i, nm400_i, nm250_o, nm400_o){

     Coag = (+0.032690 + 0.090289*Cond_in + 0.003229*Flow_in - 0.021980*pH_in - 0.037486*pH_out 
             +0.016031*Turb_in  -0.026006*nm250_i +0.093138*nm400_o - 0.397858*nm250_o - 0.109392*nm400_o)/0.167304

    return(Coag)
    }

m4_turb <- mlr_turb(dataset)  
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试在数据帧(具有相同名称的变量)中运行我的函数时。它不会检测我的变量并显示此消息:

Error in mlr_turb(dataset) : 
  argument "Flow_in" is missing, with no default

Run Code Online (Sandbox Code Playgroud)

但是,实际上,还有所有变量。

我想我在函数中遗漏了或遗漏了一些顺序,这使它有可能从数据集中获取变量。我已经搜索了很多关于这个,但我没有找到任何答案......

lin*_*nog 2

在写作时,您会遇到与(SE) 与(NSE)R问题相关的标准问题。如果您需要更多元素,可以看看我写的这篇博文standard evaluationnon standard evaluation

我认为使用变量编写函数的最方便的方法是使用变量名作为函数的参数。

让我们再次以@Muon 为例。

# a simple function that takes x, y and z as arguments 
myFun <- function(x, y, z){
  result <- (x + y)/z
  return(result)
}
Run Code Online (Sandbox Code Playgroud)

问题是在哪里可以找到名称、和R后面的值。在函数中,首先会查看函数环境(此处、和被定义为参数),然后查看全局环境,然后查看附加的不同包。xyzRxyz

在 中myFunR期望向量。如果您给出列名称,则会遇到错误。如果您想给出列名会怎样?您必须说R您给出的名称应该与数据框范围内的值相关联。例如,您可以这样做:

myFun <- function(df, col1 = "x", col2 = "y", col3 = "z"){
  result <- (df[,col1] + df[,col2])/df[,col3]
  return(result)
}
Run Code Online (Sandbox Code Playgroud)

您可以通过 package 在这方面走得更远data.table。如果您开始编写需要使用数据帧中的变量的函数,我建议您开始看看这个包