Из документации save.ffdf:
Использование «save.ffdf» автоматически устанавливает «финализатор» векторов «ff» на «закрыть». Это означает, что данные будут сохранены на диске при удалении объекта или закрытии сеансов R. Данные можно удалить либо с помощью «удалить», либо удалив каталог, в котором был сохранен объект («каталог»).
Я хочу начать с небольшого кадра данных ffdf, добавлять новые данные понемногу и увеличивать их на диске. Поэтому я провел небольшой эксперимент:
# in R
ffiris = as.ffdf(iris)
save.ffdf(ffiris, dir = "~/Desktop/iris")
# in bash
ls ~/Desktop/iris/
## ffiris$Petal.Length.ff ffiris$Petal.Width.ff ffiris$Sepal.Length.ff ffiris$Sepal.Width.ff ffiris$Species.ff
# in R
# add a new column
ffiris =transform(ffiris, new1 = rep(99, nrow(iris)))
rm(ffiris)
# in bash
ls ~/Desktop/iris/
## ffiris$Petal.Length.ff ffiris$Petal.Width.ff ffiris$Sepal.Length.ff ffiris$Sepal.Width.ff ffiris$Species.ff
Оказывается, он не обновляет автоматически данные ff на диске, когда я удаляю ffiris. А если вручную сохранить?
# in R
# add a new column
ffiris =transform(ffiris, new1 = rep(99, nrow(iris)))
save.ffdf(ffiris, "~/Desktop/iris")
# in bash
ls ~/Desktop/iris/
## ffiris$Petal.Length.ff ffiris$Petal.Width.ff ffiris$Sepal.Length.ff ffiris$Sepal.Width.ff ffiris$Species.ff
Хм, все равно не повезло. Почему?
Как насчет удаления папки перед сохранением?
# in R
ffiris = as.ffdf(iris)
unlink("~/Desktop/iris", recursive = TRUE, force = TRUE)
save.ffdf(ffiris, "~/Desktop/iris", overwrite = TRUE)
ffiris =transform(ffiris, new1 = rep(99, nrow(iris)))
unlink("~/Desktop/iris", recursive = TRUE, force = TRUE)
save.ffdf(ffiris, "~/Desktop/iris", overwrite = TRUE)
# in bash
ls ~/Desktop/iris/
# ls: /Users/ky/Desktop/iris/: No such file or directory
Еще чужой. Даже если все это работает, это все равно будет ужасно неэффективно. Я ищу что-то вроде:
updateOnDisk(ffiris)
Может ли кто-нибудь помочь?