Как решить, что "буфер буфера обмена заполнен и проигран потерян" в R работает в Windows?
Я пытаюсь скопировать некоторые данные непосредственно из R в буфер обмена на моей машине Windows. Я нашел в некоторых сайтах, которые будут работать с файлом = "clipboard". И это происходит, но для очень маленьких наборов данных.
Например:
Если я скопирую небольшой набор данных (100 obs), он работает плавно.
df1 <- data.frame(x=runif(100))
write.table(df1, file="clipboard", sep="\t", col.names=NA)
Но если я увеличу наблюдения до 10000, это не сработает:
df1 <- data.frame(x=runif(10000))
write.table(df1, file="clipboard", sep="\t", col.names=NA)
Ошибка:
Предупреждающее сообщение: In.External2 (C_writetable, x, file, nrow (x), p, r
Любое обходное решение для этого?
Ответы
Ответ 1
Если вы наберете ?connections
, вы найдете ответ.
Это важная часть:
"При записи в буфер обмена вывод копируется в буфер обмена только тогда, когда соединение закрыто или очищено. Ограничение на текст, которое должно быть записано в буфер обмена, ограничено 32 КБ. Это можно повысить, используя, например, файл (" clipboard-128"), чтобы дать 128 КБ.
Итак, решение довольно сложное:
df1 <- data.frame(x=runif(10000))
write.table(df1, file="clipboard-16384", sep="\t", col.names=NA)
Обратите внимание, что число Kb является всего лишь примером, поэтому вы можете изменить его по своему усмотрению (я ставлю 2 ^ 14, что должно быть более чем достаточно для вашего набора данных, но вы можете увеличить его еще больше. это жесткий предел, может быть, физическая память?)
Ответ 2
Мне нравится использовать только ту память, которая мне нужна. Поэтому я позволил функции object.size() выяснить, что мне нужно. Кроме того, я обычно хотел бы найти функцию, которую я люблю часто использовать.
df1 <- data.frame(x=runif(10000))
write.excel <- function(x,row.names=FALSE,col.names=TRUE,...) {
write.table(x,file = paste0("clipboard-", object.size(x)),sep="\t",row.names=row.names,col.names=col.names,...)
}
write.excel(df1, FALSE, TRUE)
Вероятно, было бы целесообразно проверить, что object.size меньше, чем memory.size. И пусть эта вещь потерпит неудачу, если это необходимо.
Надеюсь это поможет.