2012-04-22 3 views
2

그래서 MODIS NDVI 값의 시계열 (지형이 아닌 괴짜에 대한 0-1의 초목 값)이 있으며, 다음과 같은 방법으로 파생 값을 근사값으로 계산하려고합니다. for 루프. 날짜 지점의 파생어를 "Approximating"R

내 데이터의 샘플이다 : 화소 값의 줄리안 일

> m2001 
    date value valnorm 
1  1 0.4834 0.03460912 
2 17 0.4844 0.03664495 
3 33 0.5006 0.06962541 
4 49 0.4796 0.02687296 
5 65 0.5128 0.09446254 
6 81 0.4915 0.05109935 
7 97 0.4664 0.00000000 
8 113 0.5345 0.13864007 
9 129 0.8771 0.83611564 
10 145 0.9529 0.99043160 
11 161 0.9250 0.93363192 
12 177 0.9450 0.97434853 
13 193 0.9491 0.98269544 
14 209 0.9434 0.97109121 
15 225 0.9576 1.00000000 
16 241 0.8992 0.88110749 
17 257 0.9115 0.90614821 
18 273 0.8361 0.75264658 
19 289 0.5725 0.21600163 
20 305 0.5188 0.10667752 
21 321 0.5467 0.16347720 
22 337 0.5484 0.16693811 
23 353 0.5427 0.15533388 
  • 열 1
  • 칼럼 2 원료 NDVI 값을 인
  • 3 열 연신 NDVI이고 0-1 (NDVI가 실제로 1 또는 0이되는 경우는 거의 없으므로 정규화 기술입니다.)

저는 아직 프로그래밍과 R에 익숙하지 않습니다. 그러나 나는 그것에 대해 거의 이해하지 못했습니다. 내가하려는 것은 데이터 포인트의 로컬 슬로프에 대한 아이디어를 줄 수있는 값으로 새로운 컬럼을 만드는 것입니다.

deriv <- function(x1=1:23, x2=1){ 
    for (i in x1){ 
    i1 <- c(x1[i-1], x1[i], x1[i+1]) 
    i2 <- c(x2[i-1], x2[i], x2[i+1]) 
     deriv.func <- lm(i2~i1, na.action=NULL) 
    } return(deriv.func$coef[[2]]) 
} 

은 내가 그것을 실행할 때 발생하는 것은 이것이다 :

내가 함께 왔어요 기능이있다

> deriv <- function(x1=1:23, x2=1){ 
+ for (i in x1){ 
+  i1 <- c(x1[i-1], x1[i], x1[i+1]) 
+  i2 <- c(x2[i-1], x2[i], x2[i+1]) 
+ deriv.func <- lm(i2~i1, na.action=NULL) 
+ } return(deriv.func$coef[[2]]) 
Error: unexpected symbol in: 
"deriv.func <- lm(i2~i1, na.action=NULL) 
} return" 
> } 
Error: unexpected '}' in "}" 
> 

내가 잘못 뭘하는지 확실하지 않다, 내가 값을 채울 때 나는 그것을 파싱 할 수있다.

> i=6 
> x1=m2001$date 
> x2=m2001$valnorm 
>  i1 <- c(x1[i-1], x1[i], x1[i+1]) 
>  i2 <- c(x2[i-1], x2[i], x2[i+1]) 
> i1 
[1] 33 49 65 
> i2 
[1] 0.06962541 0.02687296 0.09446254 
> lm(i2 ~ i1) 

Call: 
lm(formula = i2 ~ i1) 

Coefficients: 
(Intercept)   i1 
    0.0256218 0.0007762 

> func <- lm(i2 ~ i1) 
> func$coef[[2]] 
[1] 0.0007761604 

아이디어가 있습니까? 엄청 고마워.

답변

0

글쎄, 더 for 루프 (많은)보고 후, 내가 원하는 일을하는 데있어.

deriv <- function(x1=1:23, x2=1){ 
    n=length(x1) 
    deriv.func <- character(length = n) 
    for (i in 1:n) { 
    i1 <- c(x1[i-1], x1[i], x1[i+1]) 
    i2 <- c(x2[i-1], x2[i], x2[i+1]) 
     derivate <- lm(i2~i1) 
     deriv.func[i] <- derivate$coef[[2]]* 
    } 
    return(deriv.func) 
} 

감사합니다. 올바른 방향으로 팁을 보내 주셔서 감사합니다. @dbaseman! 내가 반복자 deriv.func <- character(length = n)에 할당 된 공간을 가지고 확인하는

  • :
    차이를 만들어 아이디어.
  • 중간 변수 이 출력을 겹쳐 쓰지 않았는지 확인하십시오.
1

새 줄에 'return'을 넣으십시오.

} 
    return(deriv.func$coef[[2]]) 
} 
+0

글쎄 부분적으로 해결됩니다! 고맙습니다! 그것은 지금 오류없이 들어갑니다. 그러나 실행했을 때 : '> deriv (m2001 $ date, m2001 $ valnorm)' 나는 이것을 얻습니다 : 'lm.fit (x, y, offset = offset, singular.ok = 외부 함수 호출에서 NA/NaN/Inf가 데이터 형식 또는 루프와 관련이 있다는 느낌이 들었습니다. – forestman

관련 문제