샘플링 일당 하나의 무작위 측정을 선택하여 반복 측정의 부트스트랩을 위한 루프를 만들었습니다. 루프는 100번 실행되어야 합니다.
내 입력 데이터 프레임은 다음과 같습니다.
date spot treatment site N2O.units N2O.pv N2O.flux t.air
<chr> <int> <chr> <chr> <chr> <chr> <dbl> <dbl>
1 2019-06-21 31 min 5, bare LV mg ** 0.0002 16.5
2 2019-06-21 46 min 5, bare LV mg * 0 11.1
3 2019-07-05 31 min 5, bare LV mg ** 0.0001 17.2
4 2019-07-05 36 min 5, bare LV mg ** 0.0004 18.4
5 2019-07-05 46 min 5, bare LV mg ** 0.0001 17.2
6 2019-07-19 26 min 5, bare LV mg *** 0 29.4
7 2019-07-19 31 min 5, bare LV mg *** 0.0002 29.4
8 2019-07-19 36 min 5, bare LV mg ** 0.0002 19.9
9 2019-08-02 26 min 5, bare LV mg ** 0 26.9
10 2019-08-02 36 min 5, bare LV mg ** 0.0001 33.9
# ... with 44 more rows
먼저 목록을 만들었습니다.
lst <- list()
그런 다음 루프를 실행했습니다(예제에서는 5회만 반복함).
for(i in 1:5)
{
LV %>%
group_by(date) %>%
sample_n(1) -> result
print(result$N2O.flux)
lst[i]<-result$N2O.flux
}
결과적으로이 출력은 실제로 완벽하고 내가 원했던 것입니다.
[1] 2e-04 1e-04 2e-04 1e-04 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
[14] 0e+00 0e+00 0e+00 0e+00 0e+00 1e-04 0e+00 0e+00 -1e-04 0e+00 0e+00 0e+00
[1] 0e+00 1e-04 0e+00 0e+00 1e-04 0e+00 0e+00 0e+00 0e+00 1e-04 0e+00 0e+00 0e+00
[14] -2e-04 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 1e-04 0e+00 0e+00
[1] 0e+00 4e-04 2e-04 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 1e-04 0e+00 0e+00 0e+00
[14] 0e+00 1e-04 0e+00 0e+00 0e+00 1e-04 0e+00 0e+00 0e+00 -1e-04 0e+00 0e+00
[1] 2e-04 1e-04 0e+00 1e-04 1e-04 1e-04 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
[14] -2e-04 0e+00 0e+00 0e+00 0e+00 1e-04 0e+00 0e+00 -1e-04 0e+00 0e+00 0e+00
[1] 0e+00 1e-04 2e-04 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
[14] 0e+00 1e-04 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 -1e-04 0e+00 0e+00
그러나 내가 얻는 것은 마지막 값일뿐입니다.
str(lst)
List of 5
$ : num 0
$ : num 0
$ : num 2e-04
$ : num 0
$ : num 2e-04
.csv를 작성할 때 write.table(as.data.frame(lst),file="mylist2.csv", quote=F,sep=",",row.names=F)
다음과 같이 보입니다(꽤 끔찍합니다).
X0 | X0.1 | X2e.04 | X0.2 | X2e04.1 |
---|---|---|---|---|
0 | 0 | 2.00e-04 | 0 | 2.00e-04 |
그래서 제 질문은 다음과 같습니다.
1 | 2 | 삼 | 4 | 5 | ...등 | 100 |
---|---|---|---|---|---|---|
0 | 0 | 2.00e-04 | 0 | 2.00e-04 | ... | -1e-04 |
2.00e-04 | 0 | 2.00e-04 | 0 | 2.00e-04 | ... | -1e-04 |
-1e-04 | 0 | 4 | 0 | 2.00e-04 | ... | -1e-04 |
0 | 2.00e-04 | 2.00e-04 | 0 | -1e-04 | ... | -1e-04 |
-1e-04 | 0 | 2.00e-04 | 0 | 2.00e-04 | ... | -1e-04 |
등(25행)
당신은 아마도 경고를 눈치 챘을 것입니다
Warning message:
In lst[i] <- result$N2O.flux :
number of items to replace is not a multiple of replacement length
lst[i] <- result$N2O.flux
벡터, 즉 여러 요소가 있는 객체를 list 에 대한 하위 목록으로 추가하려고 한다고 말하면 됩니다 lst
. 이러한 상황에서 할당된 개체는 경고에 명시된 첫 번째 요소로 정리됩니다.
따라서 list()
벡터를 사용하여 할당할 단일 객체를 얻을 수 있습니다.
lst[i] <- list(result$N2O.flux)
또는 하위 목록에 액세스하고 다음과 같이 말하여 하위 목록에 요소를 추가합니다.
lst[[i]] <- result$N2O.flux
또는 행에 날짜가 있고 열에 그리는 행렬을 제공하는 다른 접근 방식을 시도할 수 있습니다.
set.seed(42)
res <- replicate(n=5, sapply(split(LV$N2O.flux, LV$date), sample, 1))
res
# [,1] [,2] [,3] [,4] [,5]
# 2019-06-21 2e-04 0e+00 0e+00 2e-04 0e+00
# 2019-07-05 1e-04 4e-04 1e-04 1e-04 4e-04
# 2019-07-19 0e+00 2e-04 2e-04 2e-04 2e-04
# 2019-08-02 0e+00 0e+00 1e-04 1e-04 0e+00
write.csv(res, file='test.csv')
당신에게주는
데이터:
LV <- structure(list(date = c("2019-06-21", "2019-06-21", "2019-07-05",
"2019-07-05", "2019-07-05", "2019-07-19", "2019-07-19", "2019-07-19",
"2019-08-02", "2019-08-02"), spot = c(31L, 46L, 31L, 36L, 46L,
26L, 31L, 36L, 26L, 36L), treatment = c("min 5, bare", "min 5, bare",
"min 5, bare", "min 5, bare", "min 5, bare", "min 5, bare", "min 5, bare",
"min 5, bare", "min 5, bare", "min 5, bare"), site = c("LV",
"LV", "LV", "LV", "LV", "LV", "LV", "LV", "LV", "LV"), N2O.units = c("mg",
"mg", "mg", "mg", "mg", "mg", "mg", "mg", "mg", "mg"), N2O.pv = c("**",
"*", "**", "**", "**", "***", "***", "**", "**", "**"), N2O.flux = c(2e-04,
0, 1e-04, 4e-04, 1e-04, 0, 2e-04, 2e-04, 0, 1e-04), t.air = c(16.5,
11.1, 17.2, 18.4, 17.2, 29.4, 29.4, 19.9, 26.9, 33.9)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다