Может быть, слишком много вопросов сразу, но я не уверен, с чего начать менять свое мышление.
Задача: Я хочу создавать и манипулировать различными TXT-файлами, управляющими моделью Delphi. Я хочу использовать R для этого.
Как изначально выглядят файлы:
[submodelname1]
variable1=value1
variable2=value2
[submodelname2]
variable3=value3
variable4=value4
В конце я хочу изменить переменные в зависимости от конкретного варианта, определяемого максимум 4 факторами. Таким образом, файлы для каждого варианта будут выглядеть так же, как и в начале, но будут отличаться значениями для каждого варианта. Имя файла должно быть: Factor1_factor2_factor3_factor4.txt для каждого варианта.
Я уже решил этот последний шаг, пытаясь использовать цикл for. Но когда стало слишком сложно со многими связанными циклами, я переключился на работу со списками.
Моя работа над списком-подходом пока:
# read a sample file to get the desired pattern
file <- read.table(file="file.txt", sep="=", dec=".", header=FALSE,
fill=TRUE, blank.lines.skip = TRUE)
# extracted submodel names in "[]"
sublistnames <- as.factor(droplevels(file[grep("[\b[A-Z0-9]]", file$V1),1]))
# list of data.frame per submodel
ls <- split(file, cumsum(1:nrow(file) %in% grep("[\b[A-Z0-9]]", file$V1)))
# names the lists like the submodels
names(ls) <- sublistnames
Теперь в первой строке каждого data.frame списка все еще есть имена подмоделей, и я все еще не могу стереть их после нескольких часов изучения потоков SO, работающих со списками. Я выучил
# this line addresses the rows I want to get rid of, but "<- NULL" doesn't work
lapply(ls, "[", 1, c(1,2))
Есть предложения, как решить эту проблему? Или есть какие-то идеи, как решить эту проблему иначе? Я стремлюсь узнать, где я думаю, что это неправильно.
Заранее спасибо.
Тем временем я пытался:
for (i in 1:length(ls)) {
ls[[i]][1,] <- NA
}
ls <- lapply(ls, function(x) x[!is.na(x)])
Но я не удовлетворен результатом, и я думаю, что есть более элегантный способ.