2013-01-27 4 views
15

Sto cercando di utilizzare la funzione write.table per scrivere negli appunti su un sistema mac os. Da altri thread, ho provatoCome scrivere da R negli appunti su un mac

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) 

Questo codice non dà alcun messaggio di errore, ma anche non copiare nulla negli appunti. qualche suggerimento?

+0

Vedi anche: http://stackoverflow.com/questions/9035674/r-function-to-copy- to-clipboard-on-mac-osx/9036742 – Rob

risposta

23

Non ho alcuna macchina sotto OS X per testarlo, ma penso che si dovrebbe usare solo clip invece di "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) 

Qui clip è un oggetto R.

Se si passa una "clip" di stringa all'argomento file, R penserà che sia un nome di file e invece di trovare i propri dati negli Appunti, nella directory di lavoro della sessione R si trova un file denominato "clip" con i tuoi dati all'interno

+0

Grazie! Questo ha funzionato perfettamente –

+6

@LinaBird: le risposte perfette meritano i segni di spunta. –

+0

Questo funziona per i dati, tuttavia, non funziona per una stringa con caratteri speciali !! – Shambho

7

È possibile utilizzare il pacchetto Kmisc, esso contiene 2 funzioni per I/O per appunti (lettura/scrittura) multivisione.

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 
+7

In qualche modo questo non funziona sul mio Mac !! Ricevo un errore che dice: "Errore in close.connection (file): connessione non valida" – Shambho

2

ho trovato questo bel codice per importare i dati in Mac direttamente dalla clipboard la risposta da Marco Ghislanzoni

Il trucco è quello di utilizzare i file di tubi. I file di pipe in R possono essere indirizzati tramite la funzione pipe. Quindi è necessario conoscere il nome corretto del file pipe che corrisponde agli appunti Mac, che è "pbpaste".

Una volta messo tutto insieme, si ha la sintassi corretta per il comando read.table:

Importazione di dati da Mac OS X clipboardR

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

In Mac OS X provate questo:

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,...) 
} 

e questo:

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

Ho appena scritto some generic functions che funziona sia per Windows che per Mac. Per usare gli stessi parametri con la versione di Windows, usano i vettori di caratteri come input e output.

3

Questa è una vecchia domanda, ma è stata comunque un successo quando stavo cercando come ottenere qualcosa negli appunti.

Ora c'è una soluzione molto migliore di qualsiasi delle risposte qui: il pacchetto clipr.

clipr::write_clip() è tutto ciò che serve. Funziona su Windows, OS X e X11.

dal file della Guida: "write_clip() cerca di essere intelligenti su scrittura di oggetti in un modo utile Se approvato una data.frame o matrice, sarà formato utilizzando write.table per incollarli in un programma di foglio di calcolo esterno.. Altrimenti costringerà l'oggetto a un vettore di caratteri, auto controllerà il tipo di oggetto, altrimenti la tabella o il carattere possono essere specificati esplicitamente."

Ho anche scritto un po 'di funzione di supporto per ottenere l'ultimo risultato negli appunti:

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