我有一個小問題,我可以使用一些幫助。我定義了一個基于 2 個向量計算多個向量的函式。一般的想法是結果是鏈接的(這就是為什么我只有一個函式),并且計算意味著聚合(結果的元素不僅取決于引數的相同元素,還取決于其他元素)。
我的問題實際上很簡單:我想在資料幀上呼叫我的函式,以便按組計算結果,并將其存盤到多個變數中。
基本上,這就是我想要做的:
myFunction <- function(x, y){
list(a = x y,
b = cumsum(x))
}
data <- data.frame(var1 = c(1,2,4,7,2),
var2 = c(2,6,2,4,6),
groups = c("a", "a", "b", "b", "b"))
data %>% group_by(groups) %>% mutate(new1 = myFunction(var1, var2)[[1]],
new2 = myFunction(var1, var2)[[2]])
但是,與示例不同,我只想呼叫我的函式一次。
有沒有人有這樣做的想法?非常感謝!
弗朗索瓦
uj5u.com熱心網友回復:
像這樣?我們可以稍微改變一下函式,并直接呼叫它作為它自己的步驟。
data <- data.frame(var1 = c(1,2,4,7,2),
var2 = c(2,6,2,4,6),
groups = c("a", "a", "b", "b", "b"))
myFunction <- function(dt, x, y){
dt %>%
mutate(new1 = {{ x }} {{ y }},
new2 = cumsum({{ x }}))
}
data %>%
group_by(groups) %>%
myFunction(var1, var2)
# A tibble: 5 x 5
# Groups: groups [2]
var1 var2 groups new1 new2
<dbl> <dbl> <chr> <dbl> <dbl>
1 1 2 a 3 1
2 2 6 a 8 3
3 4 2 b 6 4
4 7 4 b 11 11
5 2 6 b 8 13
Explanation > rlang's{{ }}是一種將參考和取消參考轉換為單個插值步驟的方法。其目的是延遲求值,即處理管道的非標準求值,函式的變數到需要的時候。
uj5u.com熱心網友回復:
如果將 的輸出轉換myFunction為資料框,它會在內部自動作業mutate:
data %>%
group_by(groups) %>%
mutate(as.data.frame(myFunction(var1, var2)))
#> # A tibble: 5 x 5
#> # Groups: groups [2]
#> var1 var2 groups a b
#> <dbl> <dbl> <chr> <dbl> <dbl>
#> 1 1 2 a 3 1
#> 2 2 6 a 8 3
#> 3 4 2 b 6 4
#> 4 7 4 b 11 11
#> 5 2 6 b 8 13
顯然,您可以在函式內部執行此操作以使mutate呼叫看起來更好,或者mutate像在我的示例中那樣在呼叫內部執行此操作,具體取決于您的函式回傳串列而不是資料框的重要性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336735.html
上一篇:將字串串列轉換為元組?
