如何通过R中的管道将输出发送到特定位置

时间:2019-12-20 05:24:16

标签: r pipe

我正在编写一个小代码,我将其进行两次比较并找出差异并将其以HH:MM:SS格式显示。

library(magrittr)
library(lubridate)
s1 <- ymd_hms(Sys.time())
s2 <- ymd_hms(Sys.time()) +200
d1 <- seconds_to_period(as.numeric(difftime(s2, s1, units = "secs")));
d2 <-sprintf('%02d:%02d:%02d', hour(d1), minute(d1), second(d1));
  

d2   [1]“ 00:03:21”

我尝试的另一种方法是通过管道技术。但是在这里,我收到一个错误。

s1 <- ymd_hms(Sys.time())
s2 <- ymd_hms(Sys.time()) +200
d3 <- difftime(s2, s1, units = "secs")  %>% as.numeric() %>% seconds_to_period() %>% sprintf('%02d:%02d:%02d', hour(.), minute(.), second(.))
  

d3 <-difftime(s2,s1,units =“ secs”)%>%as.numeric()%>%seconds_to_period()%>%   + sprintf('%02d:%02d:%02d',小时(。),分钟(。),秒(。))   sprintf(。,“%02d:%02d:%02d”,hour(。),minute(。),second(。))中的错误:     “ fmt”不是字符向量

在这种情况下,点操作似乎不起作用。我该怎么办?

还有没有更好的方法来实现时间功能?

1 个答案:

答案 0 :(得分:3)

使用管道时,默认情况下,左侧的对象是该功能的第一个输入。要停止使用大括号({})。

library(lubridate)

difftime(s2, s1, units = "secs") %>%
   as.numeric() %>%
   seconds_to_period() %>%
  {sprintf('%02d:%02d:%02d', hour(.), minute(.), second(.))}

#[1] "00:03:20"