1
我有一個數據框。爲了論證的緣故,我們假設它是datasets::women
數據框。我想通過對每一行應用一個函數從框架創建一個向量。R:使用函數dplyr :: mutate/dplyr :: transmute作用於整行
看來,通常的方式做到這一點是使用dplyr
,並呼籲mutate
或transmute
,例如:
dplyr::transmute(women, some_index = 2 * height + weight)
大:工程。 但如果我拉出來的some_index
計算到作用於一排功能:
calc_some_index <- function(woman) {
2 * woman$height + woman$weight
}
有沒有一種方法,我應該叫mutate
/transmute
,使其調用其輸入的每一行這個功能呢?
當然,我可以看到,我得到正確的結果,如果我叫
dplyr::transmute(women, some_index=calc_some_index(women))
,但我相信這僅僅是「欺騙」通過,預先計算的膠層計算向量,對transmute
通話。它不起作用,例如,如果我打電話:
dplyr::transmute(head(women, n=10), some_index=calc_some_index(women))
呀,也許這不是問題的最清晰的例證。我知道我可以在第一個位置(無論是「女性」還是「頭部(女性,n = 10)」)採取任何*,並將其用作第二位職能的參數,但我不會我不想像這樣重複自己,你對管道提出的建議與我想要的接近,並且我知道它是如何工作的(即''.''只代表全部的管道),但可以它會在沒有管道的情況下完成嗎? – Peter
我認爲你使用管道運算符'%>%'和調用'.'變量的函數是最好的解決方案。深入挖掘,我瞭解到'dplyr'提供了通過在自定義環境中使用'eval'來簡化短列的引用(例如'height'而不是'foo $ height')。爲了使它以我想的方式工作,在'eval'中評估的表達式需要直接參考我認爲不可能的封閉環境。 – Peter