Что вы должны сделать, это
f <- list.files(path="path/to/files", pattern="\\.tif$", full.names=TRUE)
library(raster)
s <- stack(f)
Теперь к вашему вопросу: что бы вы ни делали, не используйте assign
. Считать, что вам это нужно, - распространенная ошибка новичков. У него очень мало хороших применений - и, скорее всего, он вам никогда не понадобится. Его использование приводит к ужасному коду со многими объектами, которые вы вызываете по имени.
Что вы должны делать, зависит от того, что будет дальше, и вы не сказали нам (но, вероятно, это то, что я показываю выше). Как правило, если вы хотите использовать имена, вы можете давать имена элементам списка
names(r) <- paste0("r", 1:length(r))
Но это может быть более полезно
names(r) <- gsub(".tif", "", basename(f))
Если слои имеют одинаковый размер и разрешение, создайте RasterStack и назовите слои (но вы действительно должны использовать stack
в именах файлов, как я показал выше)
s <- stack(r)
names(s) <- paste0("r", 1:nlayers(s))
Кроме того, в list.files вы должны использовать pattern="\\.tif$"
чтобы не включать файлы "* .ovr". Важной частью здесь является $
, в котором говорится, что имя должно заканчиваться на .tif. \\
означает, что вы действительно хотите .
и не используете его как подстановочный знак (т.е. любой символ), что вы и делаете.
f <- list.files(path="path/to/files", pattern="\\.tif$", full.names=TRUE)