¿Cómo obtener todas las combinaciones de las columnas de un marco de datos tomadas por 2?

Supongamos que tengo este marco de datos:

matrix(c(2,4,3,1,5,7,1,2,3,5,8,2,4,5,1,1,3,6,1,3,4,5,6,1),nrow=6,ncol=4,byrow = TRUE)->X
as.data.frame(X)->X.df

  V1 V2 V3 V4
1  2  4  3  1
2  5  7  1  2
3  3  5  8  2
4  4  5  1  1
5  3  6  1  3
6  4  5  6  1

entonces me gustaría obtener una lista de un conjunto de marcos de datos que contengan todas las combinaciones de columnas tomadas por 2, sin repetición, y evitando cualquier columna consigo misma. Eso significa, una lista de marcos de datos con los siguientes encabezados:

V1,V2
V1,V3
V1,V4
V2,V3
V2,V4
V3,V4

¿Alguna idea de cómo hacer esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta