Tôi đang sử dụng hàm ifelse()
để thao tác với một vectơ ngày tháng. Tôi mong đợi kết quả là của lớp Date
, và đã rất ngạc nhiên khi nhận được một vector numeric
thay thế. Dưới đây là một ví dụ:Cách ngăn ifelse() chuyển đối tượng Ngày thành đối tượng số
dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'))
dates <- ifelse(dates == '2011-01-01', dates - 1, dates)
str(dates)
Điều này đặc biệt đáng ngạc nhiên vì thực hiện các hoạt động trên toàn bộ vector trả về một đối tượng Date
.
dates <- as.Date(c('2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04','2011-01-05'))
dates <- dates - 1
str(dates)
Tôi có nên sử dụng một số chức năng khác để hoạt động trên Date
vectơ không? Nếu có thì chức năng gì? Nếu không, làm cách nào để buộc ifelse
trả về một vectơ cùng loại với đầu vào?
Trang trợ giúp cho ifelse
cho biết đây là một tính năng chứ không phải lỗi, nhưng tôi vẫn đang cố gắng tìm giải thích cho những gì tôi thấy là hành vi đáng ngạc nhiên.
Có bây giờ là một chức năng 'if_else() 'trong gói dplyr có thể thay thế cho' ifelse' trong khi giữ lại lớp học đúng của các đối tượng ngày - đó là [được đăng bên dưới] (http://stackoverflow.com/a/38093096/4470365) như một câu trả lời gần đây. Tôi đang chú ý đến nó ở đây vì nó giải quyết vấn đề này bằng cách cung cấp một hàm được kiểm tra đơn vị và được ghi lại trong gói CRAN, không giống như nhiều câu trả lời khác (như nhận xét này) được xếp hạng trước. –