很難在函式中重用代碼。我用 [[ 子集 .data 但是收到拼接錯誤。我在下面的整潔函式中提供了一個示例和使用“if”陳述句的解決方案。是否可以在 tidyverse 編程中使用變數掩碼?
資料框
set.seed(123)
(df=data.frame(
Yrs_Before=sample(1:8, 3),
Yrs_After=sample(1:8, 3),
Before.Yr_1=sample(1:8, 3),
Before.Yr_2=sample(1:8, 3),
Before.Yr_3=sample(1:8, 3),
Before.Yr_4=sample(1:8, 3),
Before.Yr_5=sample(1:8, 3),
Before.Yr_6=sample(1:8, 3),
Before.Yr_7=sample(1:8, 3),
Before.Yr_8=sample(1:8, 3),
After.Yr_1=sample(1:8, 3),
After.Yr_2=sample(1:8, 3),
After.Yr_3=sample(1:8, 3),
After.Yr_4=sample(1:8, 3),
After.Yr_5=sample(1:8, 3),
After.Yr_6=sample(1:8, 3),
After.Yr_7=sample(1:8, 3),
After.Yr_8=sample(1:8, 3)
))
是否可以對以下功能使用變數掩碼?
sums=function(data,crashes,yrs){
data %>%
dplyr::rowwise() %>%
dplyr::transmute(sum = cumsum(c_across(matches(.data[[crashes]])))[.data[[yrs]]])
}
但是收到了一個錯誤。
sums(df,"After.Yr")
Error in splice(dot_call(capture_dots, frame_env = frame_env, named = named, :
argument "yrs" is missing, with no default
Called from: splice(dot_call(capture_dots, frame_env = frame_env, named = named,
ignore_empty = ignore_empty, unquote_names = unquote_names,
homonyms = homonyms, check_assign = check_assign))
與在各個“前一年”期間(例如“前一年”)發生的計數類似。
sums(df,"Before.Yr")
Error in splice(dot_call(capture_dots, frame_env = frame_env, named = named, :
argument "yrs" is missing, with no default
Called from: splice(dot_call(capture_dots, frame_env = frame_env, named = named,
ignore_empty = ignore_empty, unquote_names = unquote_names,
homonyms = homonyms, check_assign = check_assign))
以下是使用“if”陳述句完成的,它提供了所需的結果。下面提供了“之前”(Before.Yr)和“之后”(After.Yr)期間的所需結果
sums = function(data,counts){
data %>%
dplyr::rowwise() %>%
dplyr::transmute(sums = if(counts=="Before.Yr") {cumsum(c_across(matches('Before.Yr')))[Yrs_Before]} else{cumsum(c_across(matches('After.Yr')))[Yrs_After]})}
在之后的時期使用崩潰。
sums(df,"After.Yr")
# A tibble: 3 × 1
# Rowwise:
sums
<int>
1 21
2 20
3 6
在之前的期間使用崩潰。
> sums(df,"Before.Yr")
# A tibble: 3 × 1
# Rowwise:
sums
<int>
1 23
2 33
3 11
uj5u.com熱心網友回復:
而不是matches(.data[[crashes]])簡單地使用 do matches(crashes),當然你必須傳遞一個列名yrs:
library(dplyr)
sums <- function(data, crashes, yrs) {
data %>%
dplyr::rowwise() %>%
dplyr::transmute(sum = cumsum(c_across(matches(crashes)))[.data[[yrs]]])
}
sums(df, "After.Yr", "Yrs_After")
#> # A tibble: 3 × 1
#> # Rowwise:
#> sum
#> <int>
#> 1 21
#> 2 20
#> 3 6
sums(df, "Before.Yr", "Yrs_Before")
#> # A tibble: 3 × 1
#> # Rowwise:
#> sum
#> <int>
#> 1 23
#> 2 33
#> 3 11
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424936.html
上一篇:我可以使用什么遞回函式將字串中的字符替換為其右側的最大字符?
下一篇:c 從函式指標中提取引數型別串列
