Как импортировать и назначать переменные в R с помощью mapply или любого цикла? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть список переменных с именем working_dir, который состоит из имен файлов, которые я хочу импортировать

working_dirs
$`./.\\dataset/UCI HAR Dataset/test/Inertial Signals`
[1] "body_acc_x_test.txt"  "body_acc_y_test.txt"  "body_acc_z_test.txt"  "body_gyro_x_test.txt"
[5] "body_gyro_y_test.txt" "body_gyro_z_test.txt" "total_acc_x_test.txt" "total_acc_y_test.txt"
[9] "total_acc_z_test.txt"

$`./.\\dataset/UCI HAR Dataset/train/Inertial Signals`
[1] "body_acc_x_train.txt"  "body_acc_y_train.txt"  "body_acc_z_train.txt"  "body_gyro_x_train.txt"
[5] "body_gyro_y_train.txt" "body_gyro_z_train.txt" "total_acc_x_train.txt" "total_acc_y_train.txt"
[9] "total_acc_z_train.txt"

Я хочу импортировать каждый из файлов с read.table() и назвать его именем файла. Моя идея состоит в том, чтобы использовать mapply() и передавать каждый аргумент в функцию assign(). что-то вроде

mapply(assign , working_dir, read.table(working_dir , header = T))

Однако я знаю, что этот синтаксис неверен. Каковы способы достижения этого?

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Я написал как скрипт, который работал для меня.

library(stringr)


folders <- list.dirs()
working_dirs <- lapply( folders, function(x){ list.files(x , full.names = T) })[c(5 ,7)]


for(i in 1:length(working_dirs)){
  dire <-  working_dirs[[i]]
  direnames <- str_extract(working_dirs[[i]] , pattern = "(test|train)(.*)(\\.txt)?")
  for (ii in 1:length(dire)){
    assign(direnames[ii] , read.table(dire[ii]))
  }
}

Это даст отдельный фрейм данных для файла 18!

0 голосов
/ 26 июня 2019

Попробуйте это:

ldf=mapply(function(x,y){read.table(paste0(x,y,sep="/"),header=TRUE)},working_dir,names(working_dir))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...