如何将两个输入传递给%>;%R中的运算符

如何将两个输入传递给%>;%R中的运算符,r,pipe,readability,R,Pipe,Readability,最初我有这段代码,我试图使用%>%运算符简化并提高可读性 #Get Sunday's from 2018-01-01 till today d = seq(as.Date("2018-01-01"),Sys.Date()+365,by='day') HolidayList = data.frame(Holidays=d[weekdays(d)=='Sunday']) #Get Alternate saturdays 2nd and 4th d = seq(as.Date("2018-01-01

最初我有这段代码,我试图使用%>%运算符简化并提高可读性

#Get Sunday's from 2018-01-01 till today
d = seq(as.Date("2018-01-01"),Sys.Date()+365,by='day')
HolidayList = data.frame(Holidays=d[weekdays(d)=='Sunday'])

#Get Alternate saturdays 2nd and 4th
d = seq(as.Date("2018-01-01"),Sys.Date()+365,by='day')
saturdayList = d[weekdays(d)=='Saturday']
altSaturdayList = lapply(split(saturdayList, format(saturdayList, "%Y-%m")), function(x)
  na.omit(x[c(2,4)]))
altSaturdayList = as.data.frame(altSaturdayList)
altSaturdayList = gather(altSaturdayList)
altSaturdayList = subset(altSaturdayList,select = c(value))
HolidayList = rbind(HolidayList, setNames(altSaturdayList, "Holidays"))
HolidayList = rbind(HolidayList, setNames(as.data.frame(as.Date("2018-11-06")), "Holidays"))
HolidayList = unique(HolidayList)
HolidayList = arrange(HolidayList,Holidays)
rm(d)
rm(saturdayList)
rm(altSaturdayList)
我不想存储中间变量,这就是为什么我认为管道操作符是一个不错的选择,但我无法重现结果

这是我试过的

HolidayList = saturdayList %>% 
    data.frame(lapply(split(saturdayList, format(saturdayList, "%Y-%m")), function(x)
    na.omit(x[c(2,4)]))) %>% 
    subset(gather(altSaturdayList),select = c(value)) %>% 
    rbind(HolidayList, setNames(altSaturdayList, "Holidays")) %>% 
    rbind(HolidayList, setNames(as.data.frame(as.Date("2018-11-06")), "Holidays")) %>% 
    arrange(unique(HolidayList),Holidays)
Holidays
dataframe包含我试图绑定和添加新日期的日期

如何在不创建新变量的情况下,将每个步骤的输出作为下一行的输入


请解释这些步骤,以便我理解简化上述代码的过程。

tidyverse中有专门为管道操作员设计的功能。这些函数非常适合使用管道操作符,而不是使用基本R操作符并尝试将它们安装到管道中。您仍然可以在管道中使用基本R函数,但使用
tidyverse
工具更方便

library(tidyverse)

temp <- map_dfr(split(saturdayList,format(saturdayList, "%Y-%m")), ~ .[c(2, 4)]) %>%
    gather(key, Holidays) %>%
    select(Holidays) %>%
    bind_rows(HolidayList) %>%
    add_row(Holidays = as.Date("2018-11-06")) %>%
    unique() %>%
    na.omit() %>%
    arrange(Holidays) 

temp

#   Holidays  
#   <date>    
# 1 2018-01-07
# 2 2018-01-13
# 3 2018-01-14
# 4 2018-01-21
# 5 2018-01-27
# 6 2018-01-28
# 7 2018-02-04
# 8 2018-02-10
# 9 2018-02-11
#10 2018-02-18
# … with 160 more rows

tidyverse
中有专门为管道操作员设计的功能。这些函数非常适合使用管道操作符,而不是使用基本R操作符并尝试将它们安装到管道中。您仍然可以在管道中使用基本R函数,但使用
tidyverse
工具更方便

library(tidyverse)

temp <- map_dfr(split(saturdayList,format(saturdayList, "%Y-%m")), ~ .[c(2, 4)]) %>%
    gather(key, Holidays) %>%
    select(Holidays) %>%
    bind_rows(HolidayList) %>%
    add_row(Holidays = as.Date("2018-11-06")) %>%
    unique() %>%
    na.omit() %>%
    arrange(Holidays) 

temp

#   Holidays  
#   <date>    
# 1 2018-01-07
# 2 2018-01-13
# 3 2018-01-14
# 4 2018-01-21
# 5 2018-01-27
# 6 2018-01-28
# 7 2018-02-04
# 8 2018-02-10
# 9 2018-02-11
#10 2018-02-18
# … with 160 more rows

度假清单是从哪里来的?你无缘无故地打电话来了。@Phil很抱歉我错过了。现在添加它。这是一个包含周日日期的数据框。假期列表来自哪里?你无缘无故地打电话来了。@Phil很抱歉我错过了。现在添加它。这是一个包含周日日期的数据框。