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)'不是函数,字符或符号
答案 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
。