vectores vacio seleccionar repeticiones listas ejemplos data crear contar concatenar columnas r rcpp

vacio - listas en r



¿Cómo creo una lista de vectores en Rcpp? (2)

Tendría a usar una variación comprimida de la solución de Dirk:

using namespace Rcpp ; return List::create( _["vec"] = someVector, _["lst"] = someList, _["vec2"] = someOtherVector ) ;

Además, para volver a la pregunta original, el vector< vector<int> > debería ajustarse a una lista de vectores enteros, no a una matriz. Ver:

require( Rcpp ) require( inline ) require( RUnit ) fx <- cxxfunction( , '' std::vector< std::vector<int> > v ; std::vector<int> x1(1) ; v.push_back( x1 ); std::vector<int> x2(2) ; v.push_back( x2 ); std::vector<int> x3(3) ; v.push_back( x3 ); return wrap( v ) ; '', plugin = "Rcpp" )

Yo obtengo :

> fx() [[1]] [1] 0 [[2]] [1] 0 0 [[3]] [1] 0 0 0

Estoy escribiendo un módulo Rcpp y me gustaría volver como un elemento de la lista RcppResultSet, una lista cuyos elementos son vectores. Por ejemplo, .Call("myfunc")$foo debería ser algo como:

[[1]] [1] 1 [[2]] [1] 1 1 [[3]] [1] 1 1 1

(Los números exactos no son importantes aquí). El problema es que no conozco la forma correcta de Rcpp de hacer esto. Intenté pasar un vector<vector<int> > pero esto construye una matriz tomando silenciosamente la longitud del primer vector como el ancho (¡incluso si la matriz es irregular!). He intentado construir una RcppList pero me cuesta mucho lanzar varios objetos (como RcppVector ) de manera segura en SEXP s.

¿Alguien tiene consejos sobre las mejores prácticas para lidiar con estructuras complicadas como las listas de vectores en Rcpp?


[Encantado de ver esto aquí, pero Romain y yo generalmente recomendamos la lista rccp-devel para la pregunta. Por favor, publique en el futuro, ya que el proyecto aún no es tan grande que garantiza tener preguntas dispersas en toda la web. ]

RcppResultSet es parte de la API clásica más antigua, mientras que se ha trabajado mucho en lo que llamamos la nueva API (comenzando con las versiones 0.7. *). Eche un vistazo a la página actual de Rcpp en CRAN y la lista de viñetas: seis y contando.

Con la nueva API devolverías algo como

return Rcpp::List::create(Rcpp::Named("vec") = someVector, Rcpp::Named("lst") = someList, Rcpp::Named("vec2") = someOtherVector);

todo en una declaración (y posiblemente usando Rcpp::wrap() explícitas Rcpp::wrap() ), creando lo que en R sería

list(vec=someVector, lst=someList, vec2=someOtherVector)

Y Rcpp::List también debería poder hacer listas de listas ... aunque no estoy seguro de que tengamos pruebas unitarias para esto, pero hay numerosos ejemplos en las pruebas de más de 500 unidades.

A medida que sucede, pasé los últimos días convirtiendo una gran cantidad de código RQuantLib de la API clásica a la nueva API. Esto probablemente se lanzará una vez que tengamos la versión 0.8.3 de Rcpp (esperemos que en unos días). Mientras tanto, puede mirar el archivo SVN de RQuantLib