R function times () из пакета chron странное форматирование - PullRequest
0 голосов
/ 07 сентября 2018

Очень простая операция "times (3/24)" с функцией times из пакета chron приводит к:

> times(3/24)  
[1] 03:00:00

Когда я использую его в кадре данных, это не приводит к правильному формату. Вместо этого он пишет оригинальное число «0,125». Однако, когда я включаю его в оператор ifelse (), он работает.

См. Пример:

> X<-seq(1,10,1)  
> tdata<-as.data.frame(X)  
> tdata$T3AM<-times(3/24)  
> tdata$T3AMx<-times(ifelse(tdata$X>0,3/24,3/24))  
> tdata  
    X  T3AM    T3AMx  
1   1 0.125 03:00:00  
2   2 0.125 03:00:00  
3   3 0.125 03:00:00  
4   4 0.125 03:00:00  
5   5 0.125 03:00:00  
6   6 0.125 03:00:00  
7   7 0.125 03:00:00  
8   8 0.125 03:00:00  
9   9 0.125 03:00:00  
10 10 0.125 03:00:00    

Есть ли какое-то объяснение этому?

1 Ответ

0 голосов
/ 07 сентября 2018

Проблема в том, что класс "times" в chron не предоставляет метод rep. Если мы добавим один, то это сработает.

library(chron)
rep.times <- function(x, ...) times(rep(as.numeric(x), ...))

# from question:    
X <- seq(1,10,1)
tdata <- as.data.frame(X)
tdata$T3AM <- times(3/24)
tdata$T3AMx <- times(ifelse(tdata$X>0,3/24,3/24))

дает:

> tdata  
    X     T3AM    T3AMx
1   1 03:00:00 03:00:00
2   2 03:00:00 03:00:00
3   3 03:00:00 03:00:00
4   4 03:00:00 03:00:00
5   5 03:00:00 03:00:00
6   6 03:00:00 03:00:00
7   7 03:00:00 03:00:00
8   8 03:00:00 03:00:00
9   9 03:00:00 03:00:00
10 10 03:00:00 03:00:00

Обратите внимание, что Курт только что добавил rep.times к хрону 2.3-53, который теперь должен быть на CRAN.

...