R中不同距离度量(2D)的单位球体

R中不同距离度量(2D)的单位球体,r,plot,graph,R,Plot,Graph,我试图在R中为不同的距离度量(2D)绘制单位球体 我想想象一下L_0.1,L_0.5,L_1,L_2,L_4,L_10,L_无穷大 我希望在R中做如下的事情,但要有更多的指标 下面的R代码是我的尝试 ################ Different metrics ################## fun <- function(x,p=.5){ (abs(x)^.5)} fun1 <- function(x,p=.5){ (2-abs(x)^.5)} fun2

我试图在R中为不同的距离度量(2D)绘制单位球体

我想想象一下L_0.1,L_0.5,L_1,L_2,L_4,L_10,L_无穷大

我希望在R中做如下的事情,但要有更多的指标

下面的R代码是我的尝试

################ Different metrics ##################
fun <- function(x,p=.5){ 
(abs(x)^.5)}
fun1 <- function(x,p=.5){ 
  (2-abs(x)^.5)}

fun2 <- function(x,p=.1){ 
  (abs(x)^.1)}
fun3 <- function(x,p=.1){ 
  (2-abs(x)^.1)}

fun4 <- function(x,p=1){ 
  (abs(x)^1)}
fun5 <- function(x,p=1){ 
  (2-abs(x)^1)}

fun6 <- function(x,p=2){ 
  (abs(x)^2)}
fun7 <- function(x,p=2){ 
  (2-abs(x)^2)}

fun8 <- function(x,p=4){ 
  (abs(x)^4)}
fun9 <- function(x,p=4){ 
  (2-abs(x)^4)}

fun10 <- function(x,p=10){ 
  (abs(x)^10)}
fun11 <- function(x,p=10){ 
  (2-abs(x)^10)}


plot(fun1,1,-1,ylim=c(2,-0),xlim = c(1,-1))   
plot(fun,-1,1,add=T)      
plot(fun2,-1,1,add=T)      
plot(fun3,-1,1,add=T)      
plot(fun4,-1,1,add=T)      
plot(fun5,-1,1,add=T) 
plot(fun6,-1,1,add=T)      
plot(fun7,-1,1,add=T)      
plot(fun8,-1,1,add=T)      
plot(fun9,-1,1,add=T) 
plot(fun10,-1,1,add=T)      
plot(fun11,-1,1,add=T)      
########################################################## 
不同的度量标准##################
乐趣我建议您创建一些通用函数,并通过
lappy
循环将它们直接传递给绘图函数:

例如,您可以为每个
p
创建两个通用函数:

## The generic functions for every p and x
fun.generic1 <- function(p, x) {
    return(abs(x)^p)
}
fun.generic2 <- function(p, x) {
    return(2-abs(x)^p)
}
然后,您可以为要绘制的
p
的所有值(包括
Inf
)创建一个向量:

并使用简单的
lappy
绘制所有参数(结果保存在
silent
对象中,以避免阻塞
R
控制台):

##绘制所有参数

沉默你是否将距离作为坐标和的n次方的n次方根?@42,我执行了这个公式,但没有求和“sum(abs(x)^p)”,但是,我不知道我是否正确。我想和我在问题中所附的数字有相同的想法。它适合距离的平方和更高的幂。对于L1和L2处的2d球体,是否得到了一个正方形和一个圆形?@42-,是的,但我的球体在原点处没有如上图所示的质心。另外,我需要写2-abs(x)来得到正确的图,我不知道为什么?另外,我不能处理无穷远,那么你需要提高多元差分到pth次方。第二个问题对我来说毫无意义。您的问题是nsot可复制的。您可以将颜色或线型直接添加到
曲线
函数中作为附加参数(如果参数过多,您可能需要使用
mapply
而不是
lappy
循环)。你的第一句话,我不知道你的意思。您提供的代码不会复制所附的绘图。你能编辑代码吗?我的意思是,在一个通用函数中,你模仿我的(abs(x),2-abs(x)),我不知道在问题中生成相同的图是否正确。看看你的图和问题图中的y轴,你的y轴以1为中心,而问题图以0为中心。吉勒姆,根据颜色,当我写例如参数col=“red”或col=c(“red”、…,等等)时,它为所有p指定相同的颜色,但我希望不同的p使用不同的颜色。另外,如果我这样做了,然后使用mapply,代码就不起作用了。
## The curve wrapping function
fun.plot <- function(p) {
    curve(fun.generic1(p, x), y = c(-1, 1), add = TRUE)
    curve(fun.generic2(p, x), y = c(-1, 1), add = TRUE)
}
## All the p values
p_vector <- c(0.1, 0.5, 1, 2, 4, 10, Inf)
## Empty plot
plot(NULL, ylim = c(2, -0), xlim = c(1, -1), xlab = "x", ylab = "y")
## Plot all the parameters
silent <- lapply(p_vector, fun.plot)
## Wrapping function
plot.everything <- function(p_vector) {
    plot(NULL, ylim = c(2, -0), xlim = c(1, -1), xlab = "x", ylab = "y")
    lapply(p_vector, fun.plot)
    return(invisible())
} 

## Plotting the vector directly
plot.everything(c(0.1, 0.5, 1, 2, 4, 10, Inf))