сохранить выход цикла в csv в R [дубликат]

Почему это невозможно:

Поскольку String и Integer не находятся в одной иерархии объектов.

      Object
     /      \
    /        \
String     Integer

Кастинг, который вы пытаетесь, работает только в том случае, если он в той же иерархии, например

      Object
     /
    /
   A
  /
 /
B

В этом случае (A) objB или (Object) objB или (Object) objA будут работать.

Следовательно, как уже упоминалось ранее, конвертировать целое число для использования строки:

String.valueOf(integer) или Integer.toString(integer) для примитива,

или

Integer.toString() для объекта.

1
задан Bulat 31 May 2016 в 22:14
поделиться

1 ответ

Не нужно использовать цикл. Вы можете использовать подход data.table, который будет более эффективным и быстрым.

library(data.table)

# create a column with row positions
setDT(dt)[, rowpos := .I]

# save each line of your dataset into a separate .csv file
dt[, write.csv(.SD, paste0("output_", rowpos,".csv")), 
                  by = rowpos, .SDcols=names(dt) ]

Делать вещи намного быстрее

# Now in case you're working with a large dataset and you want
# to make things much faster, you can use `fwrite {data.table}`*

dt[, fwrite(.SD, paste0("output_", rowpos ,".csv")), 
               by = rowpos, .SDcols=names(dt) ]

Использование Loop

# in case you still want to use a loop, this will do the work for you:

for (i in 1:nrow(dt)){
                      write.csv(dt[i,], file = paste0("loop_", i, ".csv"))
                      }

Дополнительно: сохранение подмножеств dataframe по группам вместо строк

# This line of code will save a separate `.csv` file for every ID 
# and name the file according to the ID


 setDT(dt)[, fwrite(.SD, paste0("output_", ID,".csv")), 
                       by = ID, .SDcols=names(dt) ]

* ps. обратите внимание, что fwrite все еще находится в версии разработки data.table 1.9.7. Go здесь для инструкций по установке.

1
ответ дан rafa.pereira 17 August 2018 в 09:35
поделиться
  • 1
    Привет Рафаэль, спасибо за ваш ответ, но я до сих пор не могу понять, как это сделать. Я продолжаю получать следующую ошибку: «Ошибка в [.data.frame (vazao_total,, write.csv (copy (.SD) [, := mun,: unused argument (by = mun)». Здесь мой идентификатор или V1 будет mun.Может быть, я ничего не вижу ... Я буду продолжать пытаться и сообщить вам, найду ли я, почему это происходит. Кроме того, я попробовал fwrite (после установки {data.table } через github), но он также не работает. – rebeca 6 June 2016 в 15:17
  • 2
    Привет @rebeca, я сделал небольшую поправку на код, и теперь он должен работать. Не забудьте использовать library(data.table) и setDT(yourdata) – rafa.pereira 6 June 2016 в 17:06