[R-es] Trabajar con un argumento opcional como escalar o vector.

Carlos J. Gil Bellosta cgb en datanalytics.com
Mar Abr 30 19:44:58 CEST 2013


¿El vector de argumentos es igual de largo que la tabla?

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com

El día 30 de abril de 2013 19:13, Emilio Torres Manzanera
<torres en uniovi.es> escribió:
>
> Estimada Lista,
>
> Deseo aplicar una función a cada fila de un data frame con un argumento opcional.
> En la función orginal, el argumento opcional debería poder ser escalar o vector.
>
> Necesito definir una función 'aplicaratodasfilas' que llama a otra función 'atomica' que no admite vectores y que requiere también argumentos opcionales.
> Pongo un ejemplo:
>
>
> # Se aplica a cada fila.
> atomica <- function(xbegin, xend, npoints = 5, ...) { # los argumentos opcionales ... son necesarios ya que hay más funciones dentro
>   seq(xbegin,xend,length.out = npoints) # la función seq no admite vectores
> }
>
>
> aplicaratodaslasfilas <- function(data, ...) {
>   lapply(1:dim(data)[1], function(i,...) {
>     atomica(xbegin=data[i,1], xend=data[i,2], ...)
>   }, ... = ...
>          )
> }
>
> data <- data.frame(xbegin=c(1:2),xend=c(11:12))
> aplicaratodaslasfilas(data=data) # FUNCIONA
> ## [[1]]
> ## [1]  1.0  3.5  6.0  8.5 11.0
>
> ## [[2]]
> ## [1]  2.0  4.5  7.0  9.5 12.0
>
> aplicaratodaslasfilas(data=data, npoints = 3) # FUNCIONA
> ## [[1]]
> ## [1]  1  6 11
>
> ## [[2]]
> ## [1]  2  7 12
>
> aplicaratodaslasfilas(data=data, npoints = c(3,5)) # NO FUNCIONA
> # Me gustaría obtener
> ## [[1]]
> ## [1]  1  6 11
>
> ## [[2]]
> ## [1]  2.0  4.5  7.0  9.5 12.0
>
> ¿Alguien sabría definir la función aplicaracadafila de tal forma que funcione en estos casos?
> aplicaratodaslasfilas(data=data)
> aplicaratodaslasfilas(data=data, npoints = 3)
> aplicaratodaslasfilas(data=data, npoints = c(3,5))
>
> Gracias
> Emilio
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es