无法使用提供的信息进行测试,但这应该有效:
expGPA <- outer(relGPA, avgGPA, FUN=f) # See below for way to make this "work"
当您想要生成组合时,另一个有用的功能是expand.grid
,这将为您提供“长格式”:
expGPA2 <-expand.grid(relGPA, avgGPA)
expGPA2$fn <- apply(expGPA2, 1, f)
长格式是 lattice 和 ggplot 期望作为更高级别绘图的输入格式。
编辑:可能有必要构造一个更具体的方法来将列引用传递给函数,正如 djhurio 所指出的和 Sam Swift 所指出的那样(已解决)该Vectorize
策略。在 的情况下apply
,sum
函数可以像上面描述的那样开箱即用,但除法运算符不会,所以这里有一个进一步的例子,可以推广到具有多个参数的更复杂的函数。程序员所需要的只是“apply()”-ed”函数中适当参数的列号,因为(不幸的是)列名没有传递给x
参数:
> 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: (2013-01-05) 一年后看这个,我意识到 SamSwift 的函数可以通过使其主体使用“+”而不是来向量化sum
:
1/(1+exp( relGPA*pred.model$coef[1] + avgGPA*pred.model$coef[2]) # all vectorized fns