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

Carlos J. Gil Bellosta cgb en datanalytics.com
Mar Abr 30 21:37:36 CEST 2013


Pues entonces igual puedes pegar temporalmente ese vector de
parámetros en la tabla de entrada (con cbind) y pasarle a tu función
el valor de esa columna fila a fila como un argumento --atómico ya--
más.

Un saludo,

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

El día 30 de abril de 2013 20:36, Emilio Torres Manzanera
<torres en uniovi.es> escribió:
>> On Tuesday, April 30 2013, 19:44:58, Carlos J. Gil Bellosta <cgb en datanalytics.com> wrote:
>
>> ¿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
>
>
> --
> =================================================
> Emilio Torres Manzanera
> Fac. de Comercio - Universidad de Oviedo
> c/ Luis Moya 261, E-33203 Gijón (Spain)
> Tel. 985 182 197 email: torres en uniovi.es
> =================================================



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