2017-12-10 8 views
2

함수의 3D 원근감을 플로팅 하려는데,외부 (x, f) 함수를 사용할 때 R - " 'any' '유형의 벡터에 형식'클로저 '를 강요 할 수 없습니다.

egg <- function(x) { 
    return (-(x[2] + 47)*sin(sqrt(abs((x[1]/2) + x[2] + 47))) - x[1]*sin(sqrt(abs(x[1] - (x[2] + 47))))) 
} 

# Plotting eggholder 
x1 <- seq(-512, 512, length.out=100) 
x2 <- seq(-512, 512, length.out=100) 
x <- c(x1, x2) 
z <- outer(x, egg) 
par(mar=c(1,1,1,1)) 
layout(matrix(1:4, nrow=2)) 
lapply(c(0,30,60,90), function(t) persp(x1,x2,z, col='blue', theta=t)) 
+2

일반적으로 벡터 인 '외부'의 두 번째 인수에 함수를 전달하고 있습니다. 이 함수는 세번째 인자'FUN'이다. '? outer'를 확인하십시오. – LyzandeR

+0

두 개의 벡터를 전달한 다음 함수>'z <- outer (x1, x2, egg)'를 전달하려고 시도했지만 오류가 발생했습니다. ** FUN (X, Y, ...) 오류 : Y) ** –

+2

함수에는 두 개의 인수가 있어야합니다. 현재는 하나뿐입니다. – LyzandeR

답변

1

여기 일하고 코드입니다 : z <- outer(x, egg)

Error in as.vector(x, mode) : 
    cannot coerce type 'closure' to vector of type 'any' 

내 스크립트를 사용합니다. LyzandeR에게 감사드립니다.

egg <- function(x1, x2) { 
    return (-(x2 + 47)*sin(sqrt(abs((x2/2) + x2 + 47))) - 
    x2*sin(sqrt(abs(x1 - (x2 + 47))))) 
} 

# Plotting eggholder 
x1 <- seq(-512, 512, length.out=100) 
x2 <- seq(-512, 512, length.out=100) 
z <- outer(x1, x2, egg) 
par(mar=c(1,1,1,1)) 
layout(matrix(1:4, nrow=2)) 
lapply(c(0,30,60,90), function(t) persp3D(x1, x2, z, theta=t))