【问题标题】:Trying to pass more than 2 vectors to a function in R试图将超过 2 个向量传递给 R 中的函数
【发布时间】:2017-08-11 17:51:31
【问题描述】:

我想为X 的各种值计算e^(ax+b) over a=-1:1b=-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:1b=-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);还是不行

标签: r function vector


【解决方案1】:

在这种情况下,您应该只向量化变量x

sigm1 = Vectorize(function(a=-1:1,b=-1:1,x){
                    outer(a,b,sigm,x)}, vectorize.args = "x" ,SIMPLIFY = FALSE)

然后运行sigm1(-1:1,-1:1,1:3) 会得到你想要的结果。

【讨论】:

    【解决方案2】:

    我们可以只使用lapply 而根本不需要Vectorize

    lapply(x, function(x) outer(a, b, sigm, x = x))
    

    给予:

    [[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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-08
      • 2015-08-07
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多