我正在嘗試在 R 中創建一個函式。我對如何使用函式中資料中的變數有點困惑。假設我有一個資料框:
tb <- tibble(x = 1:5)
我創建了一個函式:
f <- function(data, z){
# some function
}
然后我希望能夠做到:
f(data = tb, z = x)
但我得到“f(data = tb, z = x) 中的錯誤:找不到物件 x”。我希望能夠做類似 lm 函式的事情,我告訴它資料,然后可以像這樣參考函式中的變數:
lm(mpg~cyl disp, data = mtcars)
但我不確定如何在函式內部進行這項作業。關于我如何做到這一點或這是否有意義的任何幫助?
uj5u.com熱心網友回復:
這個問題沒有被標記dplyr,tidyverse所以我認為基本 R 答案是關于主題的。
堿基R
使用 base R 來獲取一個未加引號的變數,因此未計算,到函式中,deparse(substitute(.))在函式中使用。這也適用于 R 4.1 中引入的新管道運算子。
tb <- data.frame(x = 1:5)
f <- function(data, z){
z <- deparse(substitute(z))
data[[z]] * 2
}
f(tb, z = x)
#> [1] 2 4 6 8 10
tb |> f(z = x)
#> [1] 2 4 6 8 10
由reprex 包于 2022-03-09 創建(v2.0.1)
包裹dplyr
使用 packagedplyr上面的函式可以作業,但慣用的方法是使用雙括號{{。
suppressPackageStartupMessages(library(dplyr))
g <- function(data, z){
data %>% mutate(x = {{z}} * 2)
}
tb %>% f(x)
#> [1] 2 4 6 8 10
tb %>% g(x)
#> x
#> 1 2
#> 2 4
#> 3 6
#> 4 8
#> 5 10
由reprex 包于 2022-03-09 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/440327.html
