Подтвердить что ты не робот

Как решить, что "буфер буфера обмена заполнен и проигран потерян" в 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

Любое обходное решение для этого?

4b9b3361

Ответ 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. И пусть эта вещь потерпит неудачу, если это необходимо.

Надеюсь это поможет.