我想在R中实现cantor函数并绘制它。我只知道Python和Java,所以R对我来说是新的。cantor函数被定义为:
设f0( x ) =x。
然后,对于每一个整数n fn+1(x),下一个函数≥(X)将定义为fn(x),如下所示:
设fn+1(x) = 1/2×fn(3x),0≤x≤1/3 ;
设fn+1(x) = 1/2,当1/3≤x≤2/3 ;
设fn+1(x) = 1/2 + 1/2×fn(3 x−2),当2/3≤x≤1.
这是我的密码:
cantor <- function(x,n){
if (n==0){
return(x)
}else{
if(0 <= x & x <= 1/3){
return(1/2*cantor(3*x,n-1))
}else if(1/3 < x & x < 2/3){
return(1/2)
}else{
return(1/2+1/2*cantor(3*x-2,n-1))
}
}
}只要它有一个输入,它就工作得很好。但是,如果我试图在x=seq(0,1,0.01)上绘制它,它就不能工作,因为我的条件是单个输入,但是R给出了函数的整个向量x。
是否有一种方法可以在向量上只有一个输入,或者如何重写代码以使其工作。
发布于 2021-05-09 12:44:16
您可以使用sapply或for循环来实现向量的工作。
x=seq(0,1,0.01)
y <- sapply(x, cantor, n = 3)使用for循环:
y <- numeric(length(x))
for(i in seq_along(y)) {
y[i] <- cantor(x[i], 3)
}发布于 2021-05-09 18:34:21
我们可以使用lapply
x <- seq(0, 1, 0.01)
y <- unlist(lapply(x, cantor, n = 3))https://stackoverflow.com/questions/67457758
复制相似问题