gpt4 book ai didi

r - mapply 基础知识? - 如何从两个向量和一个函数创建一个矩阵

转载 作者:行者123 更新时间:2023-12-04 15:26:55 25 4
gpt4 key购买 nike

我正在尝试创建一个用于创建图形的 data.frame。我有一个函数和两个向量,我想用作两个输入。这有点简化,但基本上我所拥有的是:

relGPA <- seq(-1.5,1.5,.2)
avgGPA <- c(-2,0,2)

f <- function(relGPA, avgGPA) 1/(1+exp(sum(relGPA*pred.model$coef[1],avgGPA*pred.model$coef[2])))

我想要的只是一个 data.frame,其中 3 列用于 avgGPA 值,16 行用于 relGPA 值以及单元格中的结果值。

我很抱歉这是多么基本的事情,但我向你保证,我已经尝试在没有你帮助的情况下做到这一点。我已经尝试按照 sapply 和 mapply 手册页上的示例进行操作,但我对 R 有点太新,无法了解我正在尝试做什么。

谢谢!

最佳答案

无法使用提供的信息进行测试,但这应该有效:

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

关于r - mapply 基础知识? - 如何从两个向量和一个函数创建一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com