Как писать из R в буфер обмена на mac - программирование
Подтвердить что ты не робот

Как писать из R в буфер обмена на mac

Я пытаюсь использовать функцию write.table для записи в мой буфер обмена в системе mac os. Из других потоков я пробовал

data <- rbind(c(1,1,2,3), c(1,1, 3, 4), c(1,4,6,7))
clip <- pipe("pbcopy", "w")                       
write.table(data, file="clip")                               
close(clip)

Этот код не дает никаких сообщений об ошибках, но также не копирует ничего в буфер обмена.   любые предложения?

4b9b3361

Ответ 1

У меня нет машины под OS X, чтобы проверить ее, но я думаю, вы должны использовать только clip вместо "clip":

data <- rbind(c(1,1,2,3), c(1,1, 3, 4), c(1,4,6,7))
clip <- pipe("pbcopy", "w")                       
write.table(data, file=clip)                               
close(clip)

Здесь clip - объект R.

Если вы передадите строку "клип" в аргумент file, то R подумает, что это имя файла, и вместо поиска ваших данных в буфере обмена вы найдете файл в вашем рабочем каталоге сеанса R, называемом "клип", с вашими данными внутри.

Ответ 2

Вы можете использовать пакет Kmisc, он содержит 2 функции для буфера обмена ввода/вывода (чтение/запись) mult-iplatform.

data <- data.frame(x1 = c(1,1,2,3), x2= c(1,1, 3, 4), x3= c(1,4,6,7))
write.cb(data)               ## wrapper to write.table in pipe("pbcopy") on MAC 
dat <- read.cb(header=T)     ## wrapper to read.table from pipe("pbpaste") on MAC
dat
  x1 x2 x3
1  1  1  1
2  1  1  4
3  2  3  6
4  3  4  7

Ответ 3

Я нашел этот хороший код для импорта данных в Mac непосредственно из буфера обмена ответ от Марко Гисланзони

Хитрость заключается в использовании файлов труб. Файлы труб в R могут быть адресованы через функцию трубы. Затем вам нужно знать правильное имя файла трубы, которое соответствует буферу Mac, который является "pbpaste".

Как только вы соедините все это, вы получите правильный синтаксис команды read.table:

Импорт данных из буфера обмена Mac OS X

data <- read.table(pipe("pbpaste"), sep="\t", header=T)

Ответ 4

Это старый вопрос, но он все еще был хитом, когда я искал, как получить что-то в буфер обмена.

Теперь есть гораздо лучшее решение, чем любой из ответов здесь: пакет clipr.

clipr::write_clip() - это все, что вам нужно. Он работает на Windows, OS X и X11.

Из файла справки: "write_clip() пытается быть умным для записи объектов полезным образом. Если передано data.frame или matrix, оно будет отформатировать его с помощью write.table для вставки в внешнюю электронную таблицу. в противном случае принуждает объект к символьному вектору. auto будет проверять тип объекта, иначе таблица или символ могут быть явно указаны."

Я также написал небольшую вспомогательную функцию, чтобы получить последний результат в буфере обмена:

wc <- function(x = .Last.value) {
  clipr::write_clip(x)
}

Ответ 5

В Mac OS X попробуйте следующее:

copy_to_clipboard = function(x,sep="\t",col.names=T,...) { 
  write.table(x
             ,file = pipe("pbcopy")
             ,sep=sep
             ,col.names = col.names
             ,row.names = F
             ,quote = F,...)
}

и это:

paste_from_clipboard = function(sep="\t",header=T,...) {       
  read.table(pipe("pbpaste")
            ,sep=sep
            ,header=header,...) 
}

Ответ 6

Я просто написал некоторые общие функции, которые работают как для окон, так и для mac. Чтобы использовать те же параметры с версией Windows, они используют символьные векторы как входные и выходные данные.