如何在我的函数中使用apply()

时间:2017-10-06 07:50:53

标签: r function apply

bmi<-function(x,y){
(x)/((y/100)^2)
}

bmi(70,177)它可以工作

但是使用apply()它不起作用

apply(Student,1:2,bmi(Student$weight,Student$height))

match.fun(FUN)出错: 'bmi(学生$ weight,Student $ height)'不是函数,字符或符号

enter image description here

1 个答案:

答案 0 :(得分:0)

有点不清楚目标是什么。如果只是为了得到答案,那么评论会回答它。另一方面,如果目标是了解你做错了什么,那么请继续阅读。我说从左到右的第一个错误是传递整个数据帧。我只会通过高度&#39;和'重量'#39;列。

下一个错误,再次从左到右,是使用1:2作为apply的第二个参数。你显然想做这个&#34;按行&#34;这意味着您应该只使用1,即数据帧的第一个维度。

第三个错误是使用函数调用而不是函数名。当R函数(在本例中为apply)期望函数名称或匿名函数(如注释中所示)时,括号中带参数的函数不起作用。

第四个错误不是将值分配给数据框中的列。因此,这可能会成功通过apply方法创建所需的额外列。但是,正如评论中所指出的,这不是最有效的方法。:

Student$bmi_val <- apply(Student[ ,c("weight", "height")], bmi)
 # didn't want my column name to be the same as the function name

apply函数实际上是为了处理矩阵和数组而设计的,因此出于多种目的,它与数据帧一起使用时不合适。在这种情况下,bmi函数的所有参数都是数字,并且您可以控制第一个参数中的参数顺序以匹配x和y位置,它可以说是可接受的策略,但不是大多数R-ish方法。使用日期或因子变量时,绝对应该避免使用apply