Я хотел бы заполнить существующий пустой фрейм данных информацией о файле, используя список и функцию file.info
.Я выполнял ту же задачу, используя цикл for
, но хотел бы узнать, как использовать семейство apply
, и подумал, что это будет хороший простой пример.
Мой список ...
listOfFiles_M <- c("I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_150000.wav", "I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_160000.wav",
"I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_170000.wav", "I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_180000.wav"
)
Мой пустой фрейм данных ...
m_files <- structure(list(size = numeric(0), isdir = logical(0), mode = structure(integer(0), class = "octmode"),
mtime = structure(numeric(0), class = c("POSIXct", "POSIXt"
)), ctime = structure(numeric(0), class = c("POSIXct", "POSIXt"
)), atime = structure(numeric(0), class = c("POSIXct", "POSIXt"
)), exe = character(0)), .Names = c("size", "isdir", "mode",
"mtime", "ctime", "atime", "exe"), row.names = character(0), class = "data.frame")
Моя функция ...
test.info <- function(i,x){
print (i)
x[i,]=c(file.info(i))
}
ИЯ подумал, что должен использовать lapply
таким образом ...
lapply(listOfFiles_M, test.info)
И вот пример того, как я хотел бы, чтобы населенный m_files
выглядел ...
m_files <- structure(list(rn = c("I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_150000.wav",
"I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_160000.wav", "I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_170000.wav",
"I:\\temp\\APIS2//APIS01/WAV/APIS01_20170414_180000.wav"), size = c(9601276,
9601276, 9601276, 9601276), isdir = c(FALSE, FALSE, FALSE, FALSE
), mode = structure(c(438L, 438L, 438L, 438L), class = "octmode"),
mtime = structure(c(1492200300, 1492203900, 1492207500, 1492211100
), class = c("POSIXct", "POSIXt")), ctime = structure(c(1537974713.78911,
1537974713.85152, 1537974713.89832, 1537974713.92952), class = c("POSIXct",
"POSIXt")), atime = structure(c(1537974713.78911, 1537974713.85152,
1537974713.89832, 1537974713.92952), class = c("POSIXct",
"POSIXt")), exe = c("no", "no", "no", "no")), .Names = c("rn",
"size", "isdir", "mode", "mtime", "ctime", "atime", "exe"), row.names = c(NA,
-4L), class = "data.frame")
РЕДАКТИРОВАТЬ: Я должен был также упомянуть, что есть большой список, ~ 200 000 пунктов, поэтому rbind
, вероятно, не является хорошим решением.