소수점 두 자리가있는 POSIX 변수의 경우 successor() 함수가 심각한 성능 손실을 보임을 알게되었습니다. 게다가 for 루프는 좋은 r-style *이 아닐 수도 있습니다. POSIX의 두 자리수가 POSIX보다 30 배 더 느리다 (20000 단계). 십진수가있는 POSIX는 벡터를 문자로 저장하는 것보다 훨씬 느립니다.소수점 이하의 POSIX 변수의 성능이 R
successor() 함수 때문에 성능이 저하됩니까? 또는 일반적으로 R에서 시간/날짜 변수를 문자로 저장하고 실제로 필요할 때 변환 할 수있는 더 많은 조언이 있습니까?
successor <- function(z) {
y<-as.vector(z)
for(i in 1:NROW(z)) {
y[i] <- if(i == NROW(z)) NA else z[i+1]
}
return(y)
}
u<-rep(strptime("15.01.2010 10:21:52.85",format="%d.%m.%Y %H:%M:%OS"),20000) # fragments of seconds stored
v<-seq(c(ISOdate(2011,09,12)),by="min", length.out=20000) # no fragments of seconds saved
u.posix.time.small<-system.time(successor(u[1:1000]))
u.char.time.small<-system.time(successor(as.character(u[1:1000])))
u.posix.time.big<-system.time(successor(u[1:20000]))
u.char.time.big<-system.time(successor(as.character(u[1:20000])))
v.posix.time.small<-system.time(successor(v[1:1000]))
v.char.time.small<-system.time(successor(as.character(v[1:1000])))
v.posix.time.big<-system.time(successor(v[1:20000]))
v.char.time.big<-system.time(successor(as.character(v[1:20000])))
rbind(u.posix.time.small,u.posix.time.big,u.char.time.small, u.char.time.big,v.posix.time.small, v.posix.time.big, v.char.time.small,v.char.time.big)[,1:3]
세그먼트 (X0의 = 사용시는 선행/sucessor 것은 우연히 * X [i]를, X1의 =의 X [내가 + 1, Y0 = Y [i]를, Y1 = Y [I + 1 ]). 어쨌든 두번 값을 저장하는 것이 낭비되는 것 같기 때문에 후임자/전임자를 다룰 수있는 또 다른 방법이 있어야합니다. 하지만 나는 프로그래머가 아니다.
나는 뭔가 잘못된 것이 있어야한다는 것을 알았다. 그래서 일반적으로 성능 문제를 설명합니다. 다음 번에 POSIXct에 날짜 객체를 저장하는 데 걸릴 것입니다. 감사. – Sebastian