Я использую write () для записи нескольких строк в один и тот же файл следующим образом:

filename='out.txt'

write(c("\n\n","No of blues =", nrow(data1)), file=filename,append=FALSE)
write(c("\n\n","No of greens =", nrow(data2)), file=filename,append=Append)
write(c("\n\n","No of reds =", nrow(data3)), file=filename,append=Append)

Data1, data2 и data3 - имена переменных.

Но у меня были следующие ошибки:

Error in cat(list(...), file, sep, fill, labels, append) : 
 argument 1 (type 'list') cannot be handled by 'cat'

Есть ли решение этой проблемы в R?

r
1
user27976 2 Янв 2014 в 20:25

2 ответа

Лучший ответ

Предположительно, вы пытаетесь write фрейм данных. Это предположение, потому что строки, которые вы нам даете, должны работать. Я не верю, что они дают ошибку. Важная часть задаваемых здесь вопросов - это немного поработать самостоятельно, чтобы выяснить, где находится ошибка, и предоставить автономный код, который генерирует ошибку. Как это не так:

Append=TRUE
filename='out.txt'
data1=data.frame(x=1:10)
data2=data.frame(y=1:3)
data3=data.frame(z=99)
write(c("\n\n","No of blues =", nrow(data1)), file=filename,append=FALSE)
write(c("\n\n","No of greens =", nrow(data2)), file=filename,append=Append)
write(c("\n\n","No of reds =", nrow(data3)), file=filename,append=Append)

Если я запустил это (и если ВЫ тоже запустите), то я не получу сообщения об ошибке. Но попробуйте это:

write(c("\n\n","data 1 is ", data1), file=filename,append=Append)

И посмотри:

Error in cat(list(...), file, sep, fill, labels, append) : 
  argument 1 (type 'list') cannot be handled by 'cat'

Собственно ваша ошибка. Может это то, что ты делаешь. Мы не знаем, потому что у нас нет от вас кода, который вызывает эту ошибку.

Если вы хотите записать фрейм данных в файл, используйте write.table.

8
Spacedman 2 Янв 2014 в 16:41

Просто используйте cat напрямую вместо записи

filename='out.txt'

data1 = matrix(1:10, ncol=2)
data2 = matrix(1:20, ncol=2)
data3 = matrix(1:30, ncol=2)

cat("No of blues =", nrow(data1), "\n", file=filename, append=FALSE, sep='')
cat("No of blues =", nrow(data2), "\n", file=filename, append=TRUE, sep='')
cat("No of blues =", nrow(data3), "\n", file=filename, append=TRUE, sep='')

#results
cat(readLines(filename), sep="\n")

## No of blues =5
## No of blues =10
## No of blues =15

Вы также можете объединить три строки в один вызов cat, чтобы не было необходимости возиться с добавлением в файлы, что всегда является рискованным делом.

cat("No of blues =", nrow(data1), "\n",
    "No of blues =", nrow(data2), "\n",
    "No of blues =", nrow(data3), "\n", file=filename, sep='')

#results
cat(readLines(filename), sep="\n")

## No of blues =5
## No of blues =10
## No of blues =15
1
Jim 2 Янв 2014 в 16:48