У меня возникла проблема добавления нового столбца для каждого элемента списка, который будет содержать измененное имя этих файлов. До сих пор я могу указать substr
для создания столбца имен файлов, но с другой стороны мне не удалось добавить новые строки в этот столбец, например, «лучшие» или «худшие» слова.Изменить имена файлов в списке файлов и добавить их в качестве нового столбца
Вот моя воспроизводимая попытка
Эта часть только для получения .txt файлы в рабочем каталоге!
writeFiles <- function(n, maxRows=10){
lapply(seq(10,90,10),function(x) write.table(sample(sample(maxRows)[1],replace=F),paste(x,'.txt',sep=""), quote=FALSE, col.names = FALSE,row.names=FALSE))
}
writeFiles(9,10)
filesToProcess <- dir(pattern = "*\\.txt")
"10.txt" "20.txt" "30.txt" "40.txt" "50.txt" "60.txt" "70.txt" "80.txt" "90.txt"
В следующем шаге я буду читать эти файлы и изменять FileNames столбец, который только принимает первый символ из .txt файлов.
data.list <- lapply(filesToProcess,function(x){
tmp <- read.table(file=x, header = F,fill=T, comment.char='*')
# tmp$filenames <- paste0(substr(x,1,1),c("best","worst"),sep="")
tmp$filenames <- substr(x,1,1)
return(tmp)
})
data.list
[[1]]
V1 filenames
1 4 1
2 3 1
3 7 1
4 8 1
5 1 1
6 2 1
7 6 1
8 5 1
[[2]]
V1 filenames
1 4 2
2 1 2
3 5 2
4 3 2
5 2 2
6 6 2
7 7 2
[[3]]
V1 filenames
1 1 3
2 3 3
3 2 3
и т.д.
В самом деле, я тоже хочу новые строки символов в filenames
колонке, и я попытался вставить команду внутри lapply
,
data.list <- lapply(filesToProcess,function(x){
tmp <- read.table(file=x, header = F,fill=T, comment.char='*')
tmp$filenames <- paste0(rep(c("best","worst"),c(4,5)),substr(x,1,1),sep="")
return(tmp)
})
Ошибка в $<-.data.frame
(*tmp*
, "имена файлов" , значение = c ("best1", # "best1",: замена имеет 9 строк, данные имеют 8
Итак, первые 4 .tx t файлы помечены как лучше всего, а оставшиеся 5 файлов - самые худшие .txt-файлы.
Как это сделать внутри lapply
?
Спасибо Akrun. Можем ли мы это сделать, не выходя из цикла? как я предлагаю. – Alexander
@ Александр изменил код, пожалуйста, проверьте, работает ли это – akrun
Hi Akrun. Спасибо чувак. Работает отлично, как всегда :) – Alexander