2013-04-09 3 views
2

for 루프를 사용하지 않고 행렬을 선형 보간하려면 R에서 interp1 함수를 사용하려고합니다. 지금까지 나는 시도했다 :행렬에 대해 R에서 interp1을 사용합니다.

bthD <- c(0,2,3,4,5) # original depth vector 
bthA <- c(4000,3500,3200,3000,2800) # original array of area 

Temp <- c(4.5,4.2,4.2,4,5,5,4.5,4.2,4.2,4) 
Temp <- matrix(Temp,2) # matrix for temperature measurements 

# -- interpolating bathymetry data -- 
depthTemp <- c(0.5,1,2,3,4) 
layerZ <- seq(depthTemp[1],depthTemp[5],0.1) 

library(signal) 
layerA <- interp1(bthD,bthA,layerZ); 

# -- interpolate= matrix -- 
layerT <- list() 
for (i in 1:2){ 
    t <- Temp[i,] 
    layerT[[i]] <- interp1(depthTemp,t,layerZ) 
} 
layerT <- do.call(rbind,layerT) 

그래서 여기서 for 루프의 행렬마다 interp1을 사용했다. for 루프를 사용하지 않고 어떻게이 작업을 수행 할 수 있는지 알고 싶습니다. 다음 I는 행렬 전치 의해 매트랩이를 수행 할 수

layerT = interp1(depthTemp,Temp',layerZ)'; % matlab code 

을하지만 R에서 이렇게 할 때

layerT <- interp1(depthTemp,t(Temp),layerZ) 

는 보간 결과의 매트릭스이지만 숫자 배열을 반환하지 . R이 보간 된 값의 행렬을 반환하도록하려면 어떻게해야합니까?

답변

1
  • 아무런 문제가 없습니다. 아마 당신이 R-틱을 느끼고 싶다면, 중간 t <-

  • 을 피하기

apply(Temp,1,function(t) interp1(depthTemp,t,layerZ))

당신은 정말 모든 경우에 당신의 앞에 (ranspose)에 추가해야 할 수도 있습니다 시도 할 것이다 그렇게해야합니다.

이것은 3 차원 필드이기 때문에 행당 보간이 최적이 아닐 수 있습니다. 내가 가장 좋아하는 패키지는 interp.loess이고 패키지는 tgp이지만, 일정 간격으로 다른 옵션을 사용할 수 있습니다. 이 방법은 미니 예제 (문제는 괜찮습니다)에서는 작동하지 않지만 큰 눈금이 필요했습니다.

관련 문제