Добавить не работает при записи в CSV в R - PullRequest
0 голосов
/ 04 мая 2018

У меня есть следующий скрипт R:

target <- c("Autocorrelation","InformationContent_zero","InformationContent_one","InformationContent_two",
            "InformationContent_four","PartialIC_zero","PartialIC_one","PartialIC_two","PartialIC_four",
            "DBI_zero","DBI_one","DBI_two","DBI_four")

for (tar in target){
  AC_data <- subset(data, select=c(tar))
  AC <- aggregate(AC_data , list(class=data$TARGET_CLASS), mean)
  ordered_AC <- AC[order(-AC[tar]),]
  write.csv(ordered_AC,file="/home/nasser/Desktop/Experiments/evosuite-report/finalData.csv",append=TRUE)
}

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

                    class Autocorrelation
16    SomeExternalClass11      0.26582445
3     MoreMethodsModified      0.21295785
10  MultiPlateauxModified      0.19942221
1             DoublePeaks      0.19534564
                    class InformationContent_zero
2             MoreMethods              0.17936452
7              MultiPeaks              0.13527150
12 NeedleInHaystackNoParm              0.11714634
6    MultiMethodsModified              0.07180512
                    class InformationContent_one
2             MoreMethods             0.17936452
7              MultiPeaks             0.13527150
12 NeedleInHaystackNoParm             0.11714634
6    MultiMethodsModified             0.07180512

Проблема в том, что единственными данными, которые записываются в файл CSV, является последняя группа, class InformationContent_one

Это означает, что первые две группы перезаписаны. Вы знаете, как это исправить, и чтобы все данные записывались в файл CSV?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Идиоматическим способом в R было бы rbind ваши фреймы данных и написать один раз:

write.csv(
  do.call(rbind, lapply(target, function(tar) {
    AC_data <- subset(data, select = c(tar))
    AC <- aggregate(AC_data , list(class = data$TARGET_CLASS), mean)
    res <- AC[order(-AC[tar]),]
    res$var <- names(res)[2]
    names(res)[2] <- "value"
    res
  })),
  file = "/home/nasser/Desktop/Experiments/evosuite-report/finalData.csv"
)
0 голосов
/ 04 мая 2018

В справке для write.table говорится:

write.csv и write.csv2 предоставляют удобные оболочки для написания CSV файлы.

...

Эти обертки намеренно негибки: они разработан, чтобы гарантировать, что правильные соглашения используются для написания действительный файл. Попытки изменить append, col.names, sep, dec или qmethod игнорируются с предупреждением.

Если вы хотите добавить, вам нужно явно указать write.table.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...