2016-12-02 1 views
0

for 루프를 작성하려고하지만 완료 할 수 없습니다. 루프를 실행했다면 잘 작동하지만 어디에 문제가 있는지 이해하지 못했습니다.루프 및 예기치 않은 결과가 발생했습니다.

output100 <- structure(list(row = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), col = c(17L, 17L, 17L, 
17L, 17L, 17L, 17L, 17L, 17L, 17L, 16L, 16L, 16L, 16L, 16L, 16L, 
16L, 16L, 16L, 16L), cell = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), xcoord = c(783750L, 
783750L, 783750L, 783750L, 783750L, 783750L, 783750L, 783750L, 
783750L, 783750L, 783725L, 783725L, 783725L, 783725L, 783725L, 
783725L, 783725L, 783725L, 783725L, 783725L), ycoord = c(187050L, 
187050L, 187050L, 187050L, 187050L, 187050L, 187050L, 187050L, 
187050L, 187050L, 187025L, 187025L, 187025L, 187025L, 187025L, 
187025L, 187025L, 187025L, 187025L, 187025L), species = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = c("abiealba", "alnuviri", "larideci", "piceabie", 
"pinucemb", "pinusilv", "popunigr", "poputrem", "salicapr", "sorbaucu" 
), class = "factor"), age = c(590L, 250L, 230L, 210L, 200L, 190L, 
180L, 110L, 100L, 90L, 720L, 320L, 300L, 230L, 170L, 160L, 150L, 
140L, 130L, 80L), biomass = c(6.3836, 1.2988, 0.9683, 0.6574, 
0.5083, 0.3398, 0.2163, 0.0863, 0.0591, 0.0418, 6.6135, 1.7666, 
1.214, 0.7032, 0.3422, 0.2571, 0.1601, 0.0846, 0.0592, 0.0323 
), stems = c(1L, 1L, 3L, 1L, 2L, 6L, 5L, 8L, 3L, 5L, 1L, 3L, 
1L, 1L, 2L, 5L, 7L, 4L, 6L, 5L), slowGrowth = c(0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L 
), DBH = c(104.9563, 50.7341, 44.7226, 37.9815, 34.1311, 28.9447, 
24.1329, 16.8379, 14.5727, 12.7875, 106.7731, 58.0343, 49.2757, 
39.0663, 29.027, 25.8599, 21.4205, 16.7129, 14.5803, 11.6105), 
    height = c(45.999, 30.659, 28.1508, 25.0823, 23.1987, 20.5, 
    17.8196, 13.4049, 11.9423, 10.7572, 46.3418, 33.4408, 30.0693, 
    25.5954, 20.5444, 18.802, 16.2293, 13.3254, 11.9472, 9.96 
    ), availableLight = c(0.8129, 0.4994, 0.3701, 0.2541, 0.217, 
    0.1588, 0.102, 0.075, 0.06, 0.0545, 0.8083, 0.4101, 0.2332, 
    0.196, 0.1694, 0.1347, 0.0941, 0.0702, 0.0602, 0.0519), light_rf = c(0.9832, 
    0.8951, 0.8029, 0.6577, 0.592, 0.463, 0.2972, 0.2003, 0.1407, 
    0.1174, 0.9826, 0.8371, 0.6213, 0.5487, 0.4885, 0.3973, 0.2696, 
    0.181, 0.1409, 0.1056), LeafArea = c(5.9777, 5.9777, 5.9777, 
    5.9777, 5.9777, 5.9777, 5.9777, 5.9777, 5.9777, 5.9777, 6.218, 
    6.218, 6.218, 6.218, 6.218, 6.218, 6.218, 6.218, 6.218, 6.218 
    ), nitorgen_rf = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0), droughtIndex = c(0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), moisture_rf = c(1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), 
    degreeDay_rf = c(0.4405, 0.4405, 0.4405, 0.4405, 0.4405, 
    0.4405, 0.4405, 0.4405, 0.4405, 0.4405, 0.4405, 0.4405, 0.4405, 
    0.4405, 0.4405, 0.4405, 0.4405, 0.4405, 0.4405, 0.4405), 
    foliageWght = c(0.1471, 0.0473, 0.0389, 0.0301, 0.0255, 0.0197, 
    0.0149, 0.0085, 0.0068, 0.0055, 0.1511, 0.0584, 0.0452, 0.0315, 
    0.0198, 0.0165, 0.0123, 0.0084, 0.0068, 0.0047), twigWght = c(0.6236, 
    0.1251, 0.0929, 0.0627, 0.0483, 0.0455, 0.0674, 0.0488, 0.0376, 
    0.0286, 0.6462, 0.1708, 0.1169, 0.0672, 0.0448, 0.0639, 0.0655, 
    0.0482, 0.0376, 0.023), boleWght = c(5.6128, 1.1263, 0.8365, 
    0.5646, 0.4345, 0.2746, 0.134, 0.0291, 0.0148, 0.0077, 5.8161, 
    1.5374, 1.0519, 0.6045, 0.2776, 0.1766, 0.0823, 0.0281, 0.0149, 
    0.0045), deadFoliage = c(0.446, 0.446, 0.446, 0.446, 0.446, 
    0.446, 0.446, 0.446, 0.446, 0.446, 0.4278, 0.4278, 0.4278, 
    0.4278, 0.4278, 0.4278, 0.4278, 0.4278, 0.4278, 0.4278), 
    deadTwig = c(0.7874, 0.7874, 0.7874, 0.7874, 0.7874, 0.7874, 
    0.7874, 0.7874, 0.7874, 0.7874, 0.7322, 0.7322, 0.7322, 0.7322, 
    0.7322, 0.7322, 0.7322, 0.7322, 0.7322, 0.7322), deadbole = c(3.4762, 
    3.4762, 3.4762, 3.4762, 3.4762, 3.4762, 3.4762, 3.4762, 3.4762, 
    3.4762, 3.1449, 3.1449, 3.1449, 3.1449, 3.1449, 3.1449, 3.1449, 
    3.1449, 3.1449, 3.1449)), .Names = c("row", "col", "cell", 
"xcoord", "ycoord", "species", "age", "biomass", "stems", "slowGrowth", 
"DBH", "height", "availableLight", "light_rf", "LeafArea", "nitorgen_rf", 
"droughtIndex", "moisture_rf", "degreeDay_rf", "foliageWght", 
"twigWght", "boleWght", "deadFoliage", "deadTwig", "deadbole" 
), row.names = c(NA, 20L), class = "data.frame") 

여기 내 코드입니다.

for (i in 0:1) { 
    t <- which(output100$cell == i) 
    a <-max(output100[c(t),8]) 
    dom <- c(a, dom) 
} 

"t"의 최대 셀을 가져 오려고합니다. 물론 작은 예제 (0 : 1) 일뿐입니다. 실제로 더 큰 데이터 세트를 가지고 있습니다.

답변

0

당신의 문제가 무엇인지 모르는 경우 for 루프가 실행됩니다. dom을 초기화하는 것을 잊었습니까?

dom = NULL 
for (i in 0:1) { 
    t <- which(output100$cell == i) 
    a <-max(output100[c(t),8]) 
    dom <- c(a, dom) 
} 
dom 
## [1] 6.6135 6.3836 

이 맞나요? 당신은 어떤 대답을 기대하고 있습니까?

덧붙여 말하자면 이것은 for 루프에서 결과 벡터를 늘릴 때 가장 효율적인 방법은 아닙니다. 고유 한 셀 값이 많은 경우이 속도가 느려집니다. 당신이 얼마나 많은 다른 cell 값을 알고도 요구하지 것이다 dplyr를 사용하여 유사한 달성 할 수 :

library(dplyr) 
output100 %>% 
    group_by(cell) %>% 
    summarise(max(biomass)) 
## # A tibble: 2 × 2 
## cell `max(biomass)` 
## <int>   <dbl> 
## 1  0   6.3836 
## 2  1   6.6135 
+0

감사 솔루션은 작동하고 빠른입니다! 전체 데이터에서 사용할 때 잘못된 결과를 얻었지만 큰 데이터 세트를 가지고 있으며 속도가 느립니다. – ismailb

관련 문제