我想计算e^(ax+b) over a=-1:1
和b=-1:1
以获得各种值X
。我希望输出形式为5个元素的列表。列表中的每个元素都是3X3矩阵。尝试将超过2个向量传递给函数R
我用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
唯一拉回这个代码片段是我使用的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)';仍然不起作用 – kasa