RStudio: скопировать один фрейм данных из одной папки проекта в другую?

#r

#r

Вопрос:

Существует ли простая однострочная функция для копирования одного фрейма данных из одной папки проекта в другую? (Windows) Т.е. Не экспортировать df в txt или csv, а затем импортировать.

Комментарии:

1. в RStudio вы можете удалить все данные в среде, кроме той, которая вам нужна, используя этот код rm(list=setdiff(ls(), "x")) , затем сохранить эти данные, затем открыть любые другие данные, а затем открыть вновь сохраненные данные, поэтому оба должны быть в среде, которые можно сохранить в 1 файл.

2. Хорошо. Поддержал ваш вопрос и комментарий.

Ответ №1:

Я полагаю, вы имеете в виду, что хотите сохранить данные в файле рабочей области, который хранится .RData в папке проекта.

На самом деле это просто внешнее представление объектов, которые были в вашей рабочей области, когда вы закрывали проект последним. Они просто записываются на диск в .RData файл.

Представьте, что у вас был Project1, который содержал один фрейм данных с именем df1 .

 df1 <- mtcars
 

Когда вы закроете Project1, df1 он будет записан в .RData .

Теперь представьте, что вы работаете в Project2, где у вас есть второй фрейм данных, df2 :

 df2 <- iris
 

Вы можете загрузить файл Project1 .RData в новую среду с помощью load() :

 Project1 <- new.env()
load("~/Project1/.RData",env = Project1)
 

Теперь вы можете назначить df2 в эту среду:

 assign("df2", df2, envir = Project1)
ls(envir = Project1)
[1] "df1" "df2"
 

Наконец, вы можете записать содержимое этой среды обратно в каталог первого проекта:

 save(list = ls(all.names = TRUE, envir = Project1),
     file = "~/Project1/.RData", envir = Project1)
 

Когда вы снова откроете Project1, df2 он должен быть загружен:

 ls()
[1] "df1" "df2"
 

Ответ №2:

Если файл еще не загружен в память в R, его можно использовать file.copy() для копирования файла из одного каталога в другой. Мы скопируем один из CSV-файлов Pokemon из PokemonData каталога datascience проекта data в подкаталог проекта.

 getwd()
# show the files in "from" directory
list.files(path="../PokemonData/",pattern="*.csv")
# show the files in "to" directory matching pattern of gen0?.csv
list.files(path="./data/",pattern="^gen0*")

file.copy("../PokemonData/gen01.csv",
          "./data/gen01.csv")

# show the files in "to" directory matching pattern of gen0?.csv
list.files(path="./data/",pattern="^gen0*")
 

… и вывод:

 > getwd()
[1] "/Users/lgreski/gitrepos/datascience"
> # show the files in "from" directory
> list.files(path="../PokemonData/",pattern="*.csv")
[1] "gen01.csv"   "gen02.csv"   "gen03.csv"   "gen04.csv"   "gen05.csv"   "gen06.csv"  
[7] "gen07.csv"   "gen08.csv"   "Pokemon.csv"
> # show the files in "to" directory matching pattern of gen0?.csv
> list.files(path="./data/",pattern="^gen0*")
character(0)
> 
> file.copy("../PokemonData/gen01.csv",
            "./data/gen01.csv")
[1] TRUE
> 
> # show the files in "to" directory matching pattern of gen0?.csv
> list.files(path="./data/",pattern="^gen0*")
[1] "gen01.csv"
 

Та же процедура работает с файлом сохранения R.