bmi<-function(x,y){
(x)/((y/100)^2)
}
BMI(70177),它可以工作如何使用應用()與我的功能
但適用()但這並沒有工作
apply(Student,1:2,bmi(Student$weight,Student$height))
錯誤match.fun(FUN ): 'BMI(學生$權重,學生$高度)' 不是一個函數,字符或符號
bmi<-function(x,y){
(x)/((y/100)^2)
}
BMI(70177),它可以工作如何使用應用()與我的功能
但適用()但這並沒有工作
apply(Student,1:2,bmi(Student$weight,Student$height))
錯誤match.fun(FUN ): 'BMI(學生$權重,學生$高度)' 不是一個函數,字符或符號
這有點不清楚目標是什麼。如果只是爲了得到答案,那麼評論就會回答。另一方面,如果目標是理解你做錯了什麼,然後繼續閱讀。我會說從左到右的第一個錯誤是傳遞整個數據幀。我只會通過'身高'和'體重'的列。
下一個錯誤,再次從左到右,使用1:2
作爲apply
的第二個參數。你顯然希望這樣做「按行」,這意味着你應該只使用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
功能實際上設計了矩陣和數組的工作,因此對於很多用途與dataframes使用時,它是不適合。在這種情況下,bmi函數的所有參數都是數值型的,並且您可以控制第一個參數中的參數順序以匹配x和y位置,這可以說是一種可接受的策略,但不是大多數R-ish方法。在處理日期或因子變量時,您應該避免使用apply
。
你的函數已經被矢量化了,所以你不需要'apply',只需'bmi(Student $ weight,Student $ height)' –
添加到剛剛說的@docendodiscimus中。 '學生$ bmi < - bmi(學生$體重,學生$身高)'如果你想要一個有bmi的專欄。 – Tsingis
'apply(Student,1,function(x)bmi(x [「weight」],x [「height」]))',但不推薦。 – kitman0804