Я не могу получить доступ к данным - PullRequest
0 голосов
/ 02 мая 2020

С помощью следующего кода я читаю несколько файлов CSV в кадры данных.

setwd("/path/to/files")

filenames <- gsub("\\.csv$","", list.files(pattern="\\.csv$"))

for(i in filenames){
  assign(i, read.csv(paste(i, ".csv", sep="")))
}

Когда я пытаюсь получить к ним доступ в следующем коде

for (i in filenames) {
    imanDavenportTest(i)
}

Я получаю следующую ошибку

Error in apply(data, MARGIN = 1, FUN = f) : 
  dim(X) must have a positive length

кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Эдвард ответил правильно. Но я хотел добавить примечание, так как вы делаете это довольно сложным способом и не используете в полной мере преимущества R.

Нет смысла использовать assign здесь. Вы можете прочитать все свои данные в одном go и сохранить результаты в виде одного объекта (списка) вместо того, чтобы N объекты загрязняли ваше рабочее пространство. Например:

# read files in your directory
file_ls <- list.files('.', pattern=".csv$")

# use lapply to read each file and create a list of data frames
data_ls <- lapply(file_ls, read.csv)

# perform the test on each element of the list
lapply(data_ls, imanDavenportTest)

assign часто принимается людьми, которые приходят из языков, которые имеют глобальные переменные, но это не использует объектно-ориентированное функциональное программирование R. ИМХО, использование assign таким образом создает код, который трудно прочитать и сохранить agile.

2 голосов
/ 02 мая 2020

Ваши "имена файлов" - это просто строки символов, представляющие имена данных, импортированных из read.csv. Вам нужно get данных от этих именованных объектов.

Так что попробуйте:

for(i in filenames){
  imanDavenportTest(get(i))
}
...