【发布时间】:2017-08-11 17:51:31
【问题描述】:
我想为X 的各种值计算e^(ax+b) over a=-1:1 和b=-1:1。我希望以 5 个元素的列表形式输出。列表中的每个元素都是 3X3 矩阵。
我确实使用 Outer 和 Vectorize 实现了这一点。
sigm = function(a=0,b=0,x){
return(exp(x*a+b))
}
sigm1 = Vectorize(function(a=-1:1,b=-1:1,x){
outer(a,b,sigm,x)
},SIMPLIFY = FALSE)
现在,sigm1(x=1:3) 给出了所需的输出
[[1]]
[,1] [,2] [,3]
[1,] 0.1353353 0.3678794 1.000000
[2,] 0.3678794 1.0000000 2.718282
[3,] 1.0000000 2.7182818 7.389056
[[2]]
[,1] [,2] [,3]
[1,] 0.04978707 0.1353353 0.3678794
[2,] 0.36787944 1.0000000 2.7182818
[3,] 2.71828183 7.3890561 20.0855369
[[3]]
[,1] [,2] [,3]
[1,] 0.01831564 0.04978707 0.1353353
[2,] 0.36787944 1.00000000 2.7182818
[3,] 7.38905610 20.08553692 54.5981500
此代码 sn-p 的唯一缺点是我使用默认值 a=-1:1 和 b=-1:1。当我尝试在函数调用期间传递相同的内容时,它会变得混乱。例如
sigm1(-1:1,-1:1,1:3)
[[1]]
[,1]
[1,] 0.1353353
[[2]]
[,1]
[1,] 1
[[3]]
[,1]
[1,] 54.59815
我无法弄清楚为什么传递参数会在输出中产生这种差异。
【问题讨论】:
-
您可能需要命名
x参数。 R 中未命名的参数按位置传递。您也可以重写该函数,使x成为第一个参数。 -
我检查了这个代码
sigm1(a=-1:1,b=-1:1,x=1:3);还是不行