Я написал простую функцию:зацикливание функцию над несколькими файлами
myfunction <- function(fileName, stringsAsFactors=TRUE,
check.names=FALSE,
skip =1,...) {
Data <- read.delim(fileName, skip = skip,
stringsAsFactors=stringsAsFactors,
check.names = check.names, ...)
cb <- list()
Index <- as.numeric(as.factor(Data[,1]))
cb <- cbind(Data, Index)
return(cb)
}
Эта функция принимает первый столбец файла с именем Data, создать индекс в соответствии с этой первой колонке, а затем cbind файл и индекс. Эта функция будет применяться в файле с именем: myfile_00.txt
, myfile_01.txt
и так далее .. Для одного файла он выглядит следующим образом:
myfunction (fileName = "myfile_00.txt")
myfunction (fileName = "myfile_01.txt")
.......
У меня есть около 1000 файлов, так что я полагаю, цикл может быть от другого сообщение:
mytxt <- dir(pattern=".txt")
n <- length(mytxt)
mylist <- vector("list", n)
for(i in 1:n) {
mylist[[i]] <- read.delim(mytxt[i], header = F, skip = 1)
}
затем:
d <- lapply(mylist, myfunction)
К сожалению, это не работает ... При использовании lapply
возникает ошибка:
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
'file' must be a character string or connection
Поскольку я новичок в R, вероятно, я делаю ошибки, я не могу понять. Может ли кто-нибудь мне помочь?
Бест,
F.
Почему вы читаете дважды? Вы также используете 'read.delim' в своей функции ..? и ваш for-loop читает, используя 'read.delim'. – Arun
okk, спасибо за это первое предложение. Поэтому достаточно написать: myfunction <- function (myfile [[i]]) { Index <- as.numeric (as.factor (myfile [[i]] [, 1])) cb = cbind (myfile [[i]], Index) return (cb) } – Fuv8
Лучше, чем показал @flodel. Передайте файлы в качестве входных аргументов функции и выполните загрузку файла внутри функции. Проверьте ответ флолели. – Arun