R中非常具体的矢量化
更新:这不够精确。我实际上有4个向量,代表2组点的x和y坐标,还有一个函数,它为每对点提供一个数字作为输出(也就是说,每一组中有一个点)。我想在不使用for循环的情况下编写这个计算 比如说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
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