Здесь есть два шага:
blockquote>X$newdate <- strptime(as.character(X$date), "%d/%m/%Y")
Теперь столбец
newdate
должен иметь типDate
.
- Отформатируйте данные. Это вопрос вызова
format()
илиstrftime()
:blockquote>format(X$newdate, "%Y-%m-%d")
Более полный пример:
R> nzd <- data.frame(date=c("31/08/2011", "31/07/2011", "30/06/2011"), + mid=c(0.8378,0.8457,0.8147)) R> nzd date mid 1 31/08/2011 0.8378 2 31/07/2011 0.8457 3 30/06/2011 0.8147 R> nzd$newdate <- strptime(as.character(nzd$date), "%d/%m/%Y") R> nzd$txtdate <- format(nzd$newdate, "%Y-%m-%d") R> nzd date mid newdate txtdate 1 31/08/2011 0.8378 2011-08-31 2011-08-31 2 31/07/2011 0.8457 2011-07-31 2011-07-31 3 30/06/2011 0.8147 2011-06-30 2011-06-30 R>
Разница между столбцами три и четыре - это тип:
newdate
имеет классDate
, тогда какtxtdate
является символом.
Каждый оператор RUN
, который вы добавляете в Dockerfile, создает новый слой, и в конце все слои объединяются (не объединяются напрямую, есть некоторые правила) для построения окончательного изображения. Даже если вы измените / удалите какой-то файл на верхнем слое, он не удалит его с нижних слоев, а лишь каким-то образом затеняет его.
Вот пример Dockerfile:
FROM baseimage
RUN wget -O file http://...
RUN rm file
Для простоты, изображение, которое baseimage
составляет 100 МБ, file
составляет 80 МБ, и для этой сборки создано три слоя. Первый уровень - 100 МБ, второй - 80 МБ, последний имеет только некоторые метаданные, чтобы указать, что файл со второго уровня удален. Таким образом, результирующее изображение будет 180 МБ (состоит из трех слоев), даже если вы удалите 80 МБ на последнем слое.
Но если вы получите, установите и удалите один и тот же слой, вы увидите разницу:
FROM baseimage
RUN wget -O file http://... && rm file
Теперь ваш первый слой равен 100 МБ, а второй - ~ 0 МБ (поскольку вы удаляете файл в том же выражении RUN
), и ваш образ равен 100 МБ.
В двух словах, вы должны установить и удалить в одном выражении RUN
.
Я думаю, что многоступенчатая сборка поможет вам в этом, поскольку на первом этапе вы можете создать свой код, а затем запустить его на следующем этапе.
# Stage 1: Build code
FROM <your image> as builder
RUN <your build instructions>
# Stage 2: Run code
FROM <your image>
# Copy artifacts from 'builder' stage
COPY --from=builder <src folder from builder> <target folder>
# Run your code
CMD [...]
.