为什么';外部';函数对于R中的某些参数值是否正常工作?

为什么';外部';函数对于R中的某些参数值是否正常工作?,r,R,当我运行R命令时: outer(37:42, 37:42, complex, 1) 我犯了一个错误 “dim中的错误(robj)更具体地说,当使用参数运行函数时,m:n,m:n每当n外部(39:44,39:44,复数,1)-不工作。外部(37:42,37:42,复数,长度.out=0)这是有效的,不只是0,而是任何值,它将一直工作到它可以循环使用为止,这个问题在r-inferno中也是不明显的,你可以阅读它,使用像max这样的函数使它矢量化以使用它。然而,我很困惑为什么会有复杂的开/关行为。

当我运行R命令时:

 outer(37:42, 37:42, complex, 1)
我犯了一个错误


“dim中的错误(robj)更具体地说,当使用参数运行函数时,
m:n
m:n
每当
n<(n-m+1)^2
[需要引用]时,它都会返回错误。例如,尝试
outer(20:23,20:23,complex,1)
outer(20:24,complex,1)
,其中第一个将失败,但后者不会,因为
24<(24-20+1)^2
。我怀疑这与
complex
的第一个参数是
length.out
,它定义了要返回的向量的
length
——我知道这不是一个真正的解释。因此,您的第一个参数
37:42
被传递到
length.out
参数。这没有多大意义如果我错了,请纠正我,但我认为你要做的是:

outer(37:42, 37:42, function(x,y) {complex(1, real = x, imaginary = y)})
哪些产出:

       [,1]   [,2]   [,3]   [,4]   [,5]   [,6]
[1,] 37+37i 37+38i 37+39i 37+40i 37+41i 37+42i
[2,] 38+37i 38+38i 38+39i 38+40i 38+41i 38+42i
[3,] 39+37i 39+38i 39+39i 39+40i 39+41i 39+42i
[4,] 40+37i 40+38i 40+39i 40+40i 40+41i 40+42i
[5,] 41+37i 41+38i 41+39i 41+40i 41+41i 41+42i
[6,] 42+37i 42+38i 42+39i 42+40i 42+41i 42+42i

希望这有帮助。

问题在第四个参数中:它应该命名为:

外部(37:42,37:42,复杂,length.out=1)


工作正常!

似乎有一条规则:如果两个向量中的上下值之间的差值小于6,则会出现错误:>外部(39:45,39:45,复数,1)-工作;>外部(39:44,39:44,复数,1)-不工作。
外部(37:42,37:42,复数,长度.out=0)
这是有效的,不只是0,而是任何值,它将一直工作到它可以循环使用为止,这个问题在r-inferno中也是不明显的,你可以阅读它,使用像max这样的函数使它矢量化以使用它。然而,我很困惑为什么会有复杂的开/关行为。或者只是
外部(37:42,37:42,复杂,length.out=1)
。我承认我不明白
complex
对向量输入做了什么
outer
在OP的代码中传递到
length.out
。我怀疑它试图填充整个矩阵或其他东西,因为每当向量的
length
超过元素的数量时,它似乎就会出错是的,
outer
语句可以稍微短一点,但由于混淆是由于错误的值被传递到错误的参数,我认为在这种情况下键入它们是有意义的。
       [,1]   [,2]   [,3]   [,4]   [,5]   [,6]
[1,] 37+37i 37+38i 37+39i 37+40i 37+41i 37+42i
[2,] 38+37i 38+38i 38+39i 38+40i 38+41i 38+42i
[3,] 39+37i 39+38i 39+39i 39+40i 39+41i 39+42i
[4,] 40+37i 40+38i 40+39i 40+40i 40+41i 40+42i
[5,] 41+37i 41+38i 41+39i 41+40i 41+41i 41+42i
[6,] 42+37i 42+38i 42+39i 42+40i 42+41i 42+42i