R中非常具体的矢量化

R中非常具体的矢量化,r,R,更新:这不够精确。我实际上有4个向量,代表2组点的x和y坐标,还有一个函数,它为每对点提供一个数字作为输出(也就是说,每一组中有一个点)。我想在不使用for循环的情况下编写这个计算 比如说 x1=c(0,1,2,3) y1=c(4,5,6,7) x2=c(1,3,5,7) y2=c(2,4,6,8) f=(x1+y1+x2)/y2 这有帮助吗 f1 <- function(i,j) (x1[i]+y1[i]+x2[j])/y2[j] ou

更新:这不够精确。我实际上有4个向量,代表2组点的x和y坐标,还有一个函数,它为每对点提供一个数字作为输出(也就是说,每一组中有一个点)。我想在不使用for循环的情况下编写这个计算

比如说

     x1=c(0,1,2,3)
     y1=c(4,5,6,7)
     x2=c(1,3,5,7)
     y2=c(2,4,6,8)
     f=(x1+y1+x2)/y2
这有帮助吗

f1 <- function(i,j) (x1[i]+y1[i]+x2[j])/y2[j]
outer(seq_along(x1), seq_along(x2), f1)
#    [,1] [,2]     [,3]  [,4]
#[1,]  2.5 1.75 1.500000 1.375
#[2,]  3.5 2.25 1.833333 1.625
#[3,]  4.5 2.75 2.166667 1.875
#[4,]  5.5 3.25 2.500000 2.125
f1
mappy(FUN=function(x1,y1,x2,y2)(x1+y1+x2)/y2,x1=c(0,1,2,3),
y1=c(4,5,6,7),x2=c(1,3,5,7),y2=c(2,4,6,8))


您需要的是基于用户定义的距离函数的“距离矩阵”。您可以在包
代理中使用
dist(…)
轻松完成此操作

f <- function(a,b) (a[1]+a[2]+b[1])/b[2]
library(proxy)
dist(cbind(x1,y1),cbind(x2,y2),method=f)
#      [,1]     [,2]     [,3]     [,4]    
# [1,] 2.500000 1.750000 1.500000 1.375000
# [2,] 3.500000 2.250000 1.833333 1.625000
# [3,] 4.500000 2.750000 2.166667 1.875000
# [4,] 5.500000 3.250000 2.500000 2.125000

f
外部(x,y)
?或者
x%o%y
?是否有办法对2个以上的向量执行此操作?对于2个以上的向量,您希望得到什么样的输出?@user132290请在帖子中更新它,并提供一个可复制的示例和所需的输出。@user132290对不起,我不清楚。如果你能显示预期的输出,根据OP,结果应该是4x4矩阵。你的结果看起来像我的解决方案的对角线。。。老实说,这不是我的理解。我可能错了。我也不确定解决方案,但OP回应了我关于维度的评论。
[1] 2.500000 2.250000 2.166667 2.125000
f <- function(a,b) (a[1]+a[2]+b[1])/b[2]
library(proxy)
dist(cbind(x1,y1),cbind(x2,y2),method=f)
#      [,1]     [,2]     [,3]     [,4]    
# [1,] 2.500000 1.750000 1.500000 1.375000
# [2,] 3.500000 2.250000 1.833333 1.625000
# [3,] 4.500000 2.750000 2.166667 1.875000
# [4,] 5.500000 3.250000 2.500000 2.125000