I pressed ^X in the wrong window. Here's the right code: Here's some code that does a pointless example In C: #include "Rinternals.h" /* function takes no arguments and returns an object */ SEXP pie(){ int n; SEXP alist, avector; /* work out how long a list to return */ n = 2; /* create the list */ PROTECT(alist = allocVector(VECSXP, n)); /* create the first vector and populate it */ n = 4; PROTECT(avector = allocVector(INTSXP, n)); INTEGER(avector)[0] = 3; INTEGER(avector)[1] = 1; INTEGER(avector)[2] = 4; INTEGER(avector)[3] = 1; /* stick it into the list */ SET_VECTOR_ELT(alist, 0, avector); UNPROTECT(1); /* create the second vector and populate it */ n = 4; PROTECT(avector = allocVector(INTSXP, n)); INTEGER(avector)[0] = 5; INTEGER(avector)[1] = 9; INTEGER(avector)[2] = 2; INTEGER(avector)[3] = 7; /* stick it into the list */ SET_VECTOR_ELT(alist, 1, avector); UNPROTECT(1); UNPROTECT(1); /* alist*/ return alist; } in R dyn.load("pie.so") .Call("pie") -thomas Thomas Lumley Assoc. Professor, Biostatistics tlumley at u.washington.edu University of Washington, Seattle