我确信这个问题有点愚蠢(抱歉)......我正在尝试使用保存在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)
问题是当我试图在 Dataframe 中运行我的函数时(变量名相同),它没有检测到我的变量,并显示以下消息:
Error in mlr_turb(dataset) :
argument "Flow_in" is missing, with no default
但是,实际上,还有所有的变量。
我想我在函数中遗漏了一些顺序,这些顺序使它有可能从数据集中获取变量。我已经搜索了很多,但我没有找到任何答案...
3条答案
按热度按时间vvppvyoh1#
别问愚蠢的问题!
我想你要找的是do.call,这个函数允许你把值作为参数解包到一个函数中,这是一个非常简单的例子。
输出:
fcipmucu2#
在编写
R
时,您会遇到一个标准问题,它与standard evaluation
(SE)vsnon standard evaluation
(NSE)的问题有关。我认为使用变量编写函数最方便的方法是使用变量名作为函数的参数。
让我们再举一个μ介子的例子。
问题是
R
应该在哪里找到名称x
,y
和z
后面的值。在一个函数中,R
将首先在函数环境中查找(这里x
,y
和z
被定义为参数),然后它将查看全局环境,然后它将查看附加的不同包。在
myFun
中,R
需要向量。如果您给予列名,您将遇到错误。如果您要提供列名,会发生什么情况?您必须告诉R
您提供的名称应该与 Dataframe 范围内的值关联。例如,您可以执行以下操作:使用
data.table
包可以在这方面做得更好,如果您开始编写需要使用 Dataframe 中的变量的函数,我建议您开始查看这个包ctzwtxfj3#
我喜欢Muon的答案,但是如果data.frame中有列而不是函数中的列,我就不能让它工作。使用with()函数是一个简单的方法,也可以让它工作...