2010-11-18 27 views

risposta

18

Sì, c'è. Si chiama "Apply" ;-)

apply(d,1,paste,collapse=" ") 
[1] "Data 2" "Data 73" 
# convert to matrix using as.matrix to get exactly your solution 

Vedi ?apply e ?paste

+0

Blarg, naturalmente, l'applicazione, duh :(Ma la pasta, crollo = "" parte non avrei mai capito, grazie :) – gakera

+0

@gakera: Capire il 'crollo =" "' parte è abbastanza facile se leggi la documentazione '? paste'. –

+0

L'aiuto non include alcun esempio di utilizzo di crollo = "", almeno non nella mia versione. Ma dal testo è chiaro cosa fa, una volta che lo vedi in tutto il rumore. – gakera

3

Dopo una rapida glace al ?paste, è chiaro che apply non è necessaria per l'esempio dato. Sarebbe utile se ci sono diverse colonne però.

> paste(d[,1],d[,2]) 
[1] "Data 2" "Data 73" 
+0

Ma ho bisogno di un modo generale che funzioni senza specificare esplicitamente le righe. Mi dispiace di non essere stato abbastanza chiaro a riguardo, ma il metodo apply funziona molto bene per ciò che devo fare. – gakera

+0

+1: molto vero. –

1

Un modo generale di farlo senza ricorrere a ?apply:

do.call(paste, as.data.frame(d)) 
[1] "Data 2" "Data 73" 

Dove as.data.frame viene utilizzata per evitare indici.

Edit:

do.call è una funzione che prende un'altra funzione come primo parametro, e una lista come secondo argomento. Viene spesso utilizzato per inviare liste di argomenti a funzioni (nel nostro caso, le colonne di d a paste()). Inviamo d come data.frame (un tipo di lista) per far funzionare questo trucco.

+0

È vero. Il guadagno di efficienza sarebbe maggiore se i dati fossero già un data.frame, ma la soluzione 'apply()' è molto più veloce per i vettori. Il vantaggio in questo è che non è necessario limitarsi a un singolo tipo di dati durante l'applicazione di pasta, ma ci sono anche molti svantaggi: ad esempio, incollare per righe invece di colonne richiede solo una modifica del numero in 'apply() 'soluzione, mentre questa richiede importanti modifiche al codice. Nel complesso, questa soluzione è solo per i miei tipici casi d'uso, dove ho fatto un indice con 'expand.grid()' e concatenato con 'do.call (incolla)' –

Problemi correlati