Hola a todos, Escribo debido a una duda en la aplicacion de la funcion seq en cada uno de los "n" componentes de un vector "x". Hasta donde yo se, dicha funcion no permite el uso de vectores. En consecuencia, y como primera aproximacion a lo que deseo hacer, he construido un bucle que retorne una lista de "n" vectores (de distinta longitud), donde cada uno de estos vectores resulta de aplicar la funtion seq a los respectivos elementos del vector "x" de la siguiente manera: # Por ejemplo, sea n = 3 con los siguientes valores iniciales: x <- c(20, 25, 35) p <- c(2, 3, 5) v <- vector('list', n) # Lista vacia en donde ubicar los "n" vectores for (i in 1:n) { v[[i]] <- seq(x[i], len = p[i]) } # Posteriormente, ubico todos los vectores en un unico vector, por ejemplo con unlist: res <- unlist(v) 20 21 25 26 27 35 36 37 38 39 Sin embargo, el anterior bucle no es eficiente si "n" es muy grande , por lo que me pregunto si existe una forma mejor de hacerlo (quizas con lapply). Muchas gracias. F. Javier
Estimado Francisco Javier No estoy seguro de como puede aumentar el rendimiento, había hace un tiempo una forma entre trabajar con ?código normal? o ?código vectorizado?, sin embargo entiendo que en las últimas versiones de R dicha diferencia comenzaba a desaparecer. Sin embargo habría dos alternativas que puede probar, una es utilizar compile (o compiler) no lo recuerdo exacto, básicamente R compila la función antes de ejecutarla, y la segunda alternativa puede ser escribir algo distinto utilizando como ejemplo de lo que está en la siguiente dirección http://stackoverflow.com/questions/10801750/whats-the-difference-between-lapply-and-do-call-in-r, por si aparecen diferencias al realizar lo mismo de distinta forma. Javier Rubén Marcuzzi De: Francisco Javier Enviado: martes, 11 de abril de 2017 17:13 Para: r-help-es en r-project.org Asunto: [R-es] Uso reiterado de la funcion seq Hola a todos, Escribo debido a una duda en la aplicacion de la funcion seq en cada uno de los "n" componentes de un vector "x". Hasta donde yo se, dicha funcion no permite el uso de vectores. En consecuencia, y como primera aproximacion a lo que deseo hacer, he construido un bucle que retorne una lista de "n" vectores (de distinta longitud), donde cada uno de estos vectores resulta de aplicar la funtion seq a los respectivos elementos del vector "x" de la siguiente manera: # Por ejemplo, sea n = 3 con los siguientes valores iniciales: x <- c(20, 25, 35) p <- c(2, 3, 5) v <- vector('list', n) # Lista vacia en donde ubicar los "n" vectores for (i in 1:n) { v[[i]] <- seq(x[i], len = p[i]) } # Posteriormente, ubico todos los vectores en un unico vector, por ejemplo con unlist: res <- unlist(v) 20 21 25 26 27 35 36 37 38 39 Sin embargo, el anterior bucle no es eficiente si "n" es muy grande , por lo que me pregunto si existe una forma mejor de hacerlo (quizas con lapply). Muchas gracias. F. Javier _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Hola, Esta es una forma de hacerlo con la librería "purrr": #-----------------------> library(purrr) > x <- list(20, 25, 35) > p <- list(2, 3, 5) > res_out <- unlist(seq_along(x) %>%+ map( ~seq(x[[.]], length.out = p[[.]], by=1) ))> res_out[1] 20 21 25 26 27 35 36 37 38 39 #----------------------- Saludos, Carlos Ortega www.qualityexcellence.es El 11 de abril de 2017, 22:13, Francisco Javier <iterador10 en hotmail.com> escribió:> Hola a todos, > > Escribo debido a una duda en la aplicacion de la funcion seq en cada uno > de los "n" componentes de un vector "x". Hasta donde yo se, dicha funcion > no permite el uso de vectores. > En consecuencia, y como primera aproximacion a lo que deseo > hacer, he construido un bucle que retorne una lista de "n" vectores (de > distinta longitud), donde cada uno de estos > vectores resulta de aplicar la funtion seq a los respectivos elementos del > vector "x" de la siguiente manera: > > # Por ejemplo, sea n = 3 con los siguientes valores iniciales: > x <- c(20, 25, 35) > p <- c(2, 3, 5) > > v <- vector('list', n) # Lista vacia en donde ubicar los "n" > vectores > for (i in 1:n) { > v[[i]] <- seq(x[i], len = p[i]) > } > > # Posteriormente, ubico todos los vectores en un unico vector, por ejemplo > con unlist: res <- unlist(v) > 20 21 25 26 27 35 36 37 38 39 > > Sin embargo, el anterior bucle no es eficiente si "n" es muy grande , por > lo que me pregunto si existe una forma mejor de hacerlo (quizas con lapply). > Muchas gracias. > > F. Javier > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Muchas gracias Javier y Carlos por las respuestas! Saludos, F. Javier ________________________________ De: Carlos Ortega <cof en qualityexcellence.es> Enviado: miércoles, 12 de abril de 2017 1:11 Para: Francisco Javier Cc: r-help-es en r-project.org Asunto: Re: [R-es] Uso reiterado de la funcion seq Hola, Esta es una forma de hacerlo con la librería "purrr": #-----------------------> library(purrr) > x <- list(20, 25, 35) > p <- list(2, 3, 5) > res_out <- unlist(seq_along(x) %>%+ map( ~seq(x[[.]], length.out = p[[.]], by=1) ))> res_out[1] 20 21 25 26 27 35 36 37 38 39 #----------------------- Saludos, Carlos Ortega www.qualityexcellence.es<http://www.qualityexcellence.es> QualityExcellence<http://www.qualityexcellence.es/> www.qualityexcellence.es QUALITY EXCELLENCE, consultores en calidad, procesos y mejora continua El 11 de abril de 2017, 22:13, Francisco Javier <iterador10 en hotmail.com<mailto:iterador10 en hotmail.com>> escribió: Hola a todos, Escribo debido a una duda en la aplicacion de la funcion seq en cada uno de los "n" componentes de un vector "x". Hasta donde yo se, dicha funcion no permite el uso de vectores. En consecuencia, y como primera aproximacion a lo que deseo hacer, he construido un bucle que retorne una lista de "n" vectores (de distinta longitud), donde cada uno de estos vectores resulta de aplicar la funtion seq a los respectivos elementos del vector "x" de la siguiente manera: # Por ejemplo, sea n = 3 con los siguientes valores iniciales: x <- c(20, 25, 35) p <- c(2, 3, 5) v <- vector('list', n) # Lista vacia en donde ubicar los "n" vectores for (i in 1:n) { v[[i]] <- seq(x[i], len = p[i]) } # Posteriormente, ubico todos los vectores en un unico vector, por ejemplo con unlist: res <- unlist(v) 20 21 25 26 27 35 36 37 38 39 Sin embargo, el anterior bucle no es eficiente si "n" es muy grande , por lo que me pregunto si existe una forma mejor de hacerlo (quizas con lapply). Muchas gracias. F. Javier _______________________________________________ R-help-es mailing list R-help-es en r-project.org<mailto:R-help-es en r-project.org> https://stat.ethz.ch/mailman/listinfo/r-help-es -- Saludos, Carlos Ortega www.qualityexcellence.es<http://www.qualityexcellence.es> [[alternative HTML version deleted]]