Как следует из этого вопроса:
извлечение n-го значения во вложенном списке с помощью map_dbl
У меня проблемы с пониманием того, почему работает следующий код, когда в таблице есть одна строка, а не когда несколько строк.
x_n %>%
mutate( vald_end = data %>% map_dbl( ., function(x) max(x$time_cum)),
h1 = vald_end - 15*60,
index_1 = data %>% map_dbl( ., function(x) which.max(x$time_cum > h1)),
index_2 = index_1 - 1,
vald_start = data %>% map_dbl( ., ~ nth( .$time_cum,
n = index_1,
order_by = .$time_cum) )) ->
x_r
Если x_n равен
> x
# A tibble: 113 x 6
meta_event meta_aktivitet meta_subject_id time time_cum vo2
<chr> <chr> <chr> <chr> <dbl> <dbl>
1 001 001 100001 0:10 min 10 1.66
2 001 001 100001 0:15 min 15 2.52
3 001 001 100001 0:20 min 20 2.64
4 001 001 100001 0:25 min 25 2.68
5 001 001 100001 0:30 min 30 2.66
6 001 001 100001 0:35 min 35 2.71
7 001 001 100001 0:40 min 40 2.95
8 001 001 100001 0:45 min 45 2.09
9 001 001 100001 0:50 min 50 2.58
10 001 001 100001 0:55 min 55 2.91
# ... with 103 more rows
>
> x %>%
+ group_by( .,
+ meta_event,
+ meta_aktivitet,
+ meta_subject_id) %>%
+ filter( ., meta_subject_id == "100001") %>%
+ nest() ->
+ x_n
> x_n
# A tibble: 3 x 4
meta_event meta_aktivitet meta_subject_id data
<chr> <chr> <chr> <list>
1 001 001 100001 <tibble [36 x 3]>
2 002 001 100001 <tibble [39 x 3]>
3 003 001 100001 <tibble [38 x 3]>
>
R выдает следующую ошибку при запуске кода
x_n %>%
mutate( vald_end = data %>% map_dbl( ., function(x) max(x$time_cum)),
h1 = vald_end - 15*60,
index_1 = data %>% map_dbl( ., function(x) which.max(x$time_cum > h1)),
index_2 = index_1 - 1,
vald_start = data %>% map_dbl( ., ~ nth( .$time_cum,
n = index_1,
order_by = .$time_cum) )) ->
x_r
x_r
Error in mutate_impl(.data, dots) :
Evaluation error: length(n) == 1 is not TRUE.
In addition: Warning message:
In x$time_cum > h1 :
Hide Traceback
Rerun with Debug
Error in mutate_impl(.data, dots) :
Evaluation error: length(n) == 1 is not TRUE.
12. stop(structure(list(message = "Evaluation error: length(n) == 1 is not TRUE.",
call = mutate_impl(.data, dots), cppstack = NULL), class = c("Rcpp::eval_error",
"C++Error", "error", "condition")))
11. mutate_impl(.data, dots)
10. mutate.tbl_df(., vald_end = data %>% map_dbl(., function(x) max(x$time_cum)),
h1 = vald_end - 15 * 60, index_1 = data %>% map_dbl(., function(x) which.max(x$time_cum >
h1)), index_2 = index_1 - 1, vald_start = data %>% map_dbl(.,
~nth(.$time_cum, n = index_1, order_by = .$time_cum)))
9. mutate(., vald_end = data %>% map_dbl(., function(x) max(x$time_cum)),
h1 = vald_end - 15 * 60, index_1 = data %>% map_dbl(., function(x) which.max(x$time_cum >
h1)), index_2 = index_1 - 1, vald_start = data %>% map_dbl(.,
~nth(.$time_cum, n = index_1, order_by = .$time_cum)))
8. function_list[[k]](value)
7. withVisible(function_list[[k]](value))
6. freduce(value, `_function_list`)
5. `_fseq`(`_lhs`)
4. eval(quote(`_fseq`(`_lhs`)), env, env)
3. eval(quote(`_fseq`(`_lhs`)), env, env)
2. withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
1. x_n %>% mutate(vald_end = data %>% map_dbl(., function(x) max(x$time_cum)),
h1 = vald_end - 15 * 60, index_1 = data %>% map_dbl(., function(x) which.max(x$time_cum >
h1)), index_2 = index_1 - 1, vald_start = data %>% map_dbl(.,
~nth(.$time_cum, n = index_1, order_by = .$time_cum)))
>
но если я отфильтрую x, так что x_n - только одна строка, я получу следующий результат
> x %>%
+ group_by( .,
+ meta_event,
+ meta_aktivitet,
+ meta_subject_id) %>%
+ filter( ., meta_event == "001") %>%
+ nest() ->
+ x_n
> x_n
# A tibble: 1 x 4
meta_event meta_aktivitet meta_subject_id data
<chr> <chr> <chr> <list>
1 001 001 100001 <tibble [36 x 3]>
> x_n %>%
+ mutate( vald_end = data %>% map_dbl( ., function(x) max(x$time_cum)),
+ h1 = vald_end - 15*60,
+ index_1 = data %>% map_dbl( ., function(x) which.max(x$time_cum > h1)),
+ index_2 = index_1 - 1,
+ vald_start = data %>% map_dbl( ., ~ nth( .$time_cum,
+ n = index_1,
+ order_by = .$time_cum) )) ->
+ x_r
> x_r
# A tibble: 1 x 9
meta_event meta_aktivitet meta_subject_id data vald_end h1 index_1 index_2 vald_start
<chr> <chr> <chr> <li> <dbl> <dbl> <dbl> <dbl> <dbl>
1 001 001 100001 <ti~ 195 -705 1 0 10
>
Похоже, что n = index_1 в nth () извлекает полный столбец. Есть ли способ избежать этого?
Привет из Дании
Дэн Олесен