no se puede probar con la información ofrecida, pero esto debería funcionar:
expGPA <- outer(relGPA, avgGPA, FUN=f) # See below for way to make this "work"
Otra función útil cuando se desea generar combinaciones es expand.grid
y esto sería conseguir que la "forma larga":
expGPA2 <-expand.grid(relGPA, avgGPA)
expGPA2$fn <- apply(expGPA2, 1, f)
La forma larga es lo que esperará la red y ggplot como formato de entrada para un trazado de mayor nivel.
EDITAR: Puede ser necesario construir un método más específico para pasar referencias de columna a la función como lo señala djhurio y (resuelto) por Sam Swift con la estrategia Vectorize
. En el caso de apply
, la función sum
funcionaría de la forma descrita anteriormente, pero el operador de división no lo haría, así que aquí hay otro ejemplo que se puede generalizar a funciones más complejas con múltiples argumentos. Todas las necesidades de programador es el número de la columna para el argumento apropiado en el "apply()" - Función ed", debido a que (por desgracia) los nombres de las columnas no son llevadas a través de la x
argumento:
> expGPA2$fn <- apply(expGPA2, 1, function(x) x[1]/x[2])
> str(expGPA2)
'data.frame': 48 obs. of 3 variables:
$ Var1: num -1.5 -1.3 -1.1 -0.9 -0.7 ...
$ Var2: num -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 ...
$ fn : num 0.75 0.65 0.55 0.45 0.35 ...
- attr(*, "out.attrs")=List of 2
..$ dim : int 16 3
..$ dimnames:List of 2
.. ..$ Var1: chr "Var1=-1.5" "Var1=-1.3" "Var1=-1.1" "Var1=-0.9" ...
.. ..$ Var2: chr "Var2=-2" "Var2= 0" "Var2= 2"
Edit2 : (05/01/2013) en cuanto a este un año más tarde, me di cuenta de que la función de SamSwift podría ser vectorizado por lo que su uso corporal "+" en lugar de sum
:
1/(1+exp(relGPA*pred.model$coef[1] + avgGPA*pred.model$coef[2]) # all vectorized fns
'F' debe ser una función vectorizada a úselo en 'outer'. Y' apply' no funciona así. Vea mi edición. – djhurio
Gracias DWin, eso fue lo que hizo, y djhurio está en lo cierto como bien. Agregué "vf <- Vectorize (f, SIMPLIFY = FALSE)" después de definir mi función, y luego era exactamente lo que necesitaba. –