R - kableExtra - footnote (): Трудно кодировать цикл for - PullRequest
0 голосов
/ 29 сентября 2019

Цель этой операции - добавить символ в первый столбец таблицы "voy_tranches", если объект отношения, соответствующий временному интервалу и вычисленный в таблице "JO_ratio_tranches", меньше 5% (отображается красным цветом втаблица).

voy_tranches table

> dput(voy_tranches)
structure(list(tranches = c(".1_JO[4h_7h[", ".2_JO[7h_9h[", ".3_JO[9h_12h[", 
".4_JO[12h_15h30[", ".5_JO[15h30_18h[", ".6_JO[18h_20h[", ".7_JO[20h_22h[", 
".8_JO[22h_4h["), voy = c(2207, 13051, 14049, 19055, 20094, 7618, 
2544, 704), montees = c(847, 6912, 7701, 11008, 10820, 4082, 1286, 352), dist = c(2.61, 1.89, 1.82, 1.73, 1.86, 1.87, 1.98, 2)), row.names = c(NA, -8L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000000121ef0>)

JO_ratio_tranches table

> dput(JO_ratio_tranches)
structure(list(chem = c("257-ROG1D-NOR4-THOM-LIED3-DVA3", "302-DVA3-DVI4-BOR7-PAIX-ROG1A"), dir = c("R", "A"), `.1_JO[4h_7h[_txcouv` = c(6.7, 6.5), `.2_JO[7h_9h[_txcouv` = c(3.9, 7), `.3_JO[9h_12h[_txcouv` = c(4.5, 5.7), `.4_JO[12h_15h30[_txcouv` = c(5.8, 7), `.5_JO[15h30_18h[_txcouv` = c(3.7, 6.3), `.6_JO[18h_20h[_txcouv` = c(4.1, 5.3), `.7_JO[20h_22h[_txcouv` = c(3.3, 3.9), `.8_JO[22h_4h[_txcouv` = c(2.9, 3.6)), row.names = c(NA, -2L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000000121ef0>, sorted = "chem")

Я пытаюсьвекторизовать этот код в цикл for, но у меня всегда есть сообщение об ошибке, и я не знаю, как его решить!

ratio_1 <- JO_ratio_tranches[`.1_JO[4h_7h[_txcouv` < 5, `.1_JO[4h_7h[_txcouv`]
if(!is_empty(ratio_1)){voy_tranches[1,1] <- paste(voy_tranches[1,1], footnote_marker_symbol(1))}

ratio_2 <- JO_ratio_tranches[`.2_JO[7h_9h[_txcouv` < 5, `.2_JO[7h_9h[_txcouv`]
if(!is_empty(ratio_2)){voy_tranches[2,1] <- paste(voy_tranches[2,1], footnote_marker_symbol(1))}

ratio_3 <- JO_ratio_tranches[`.3_JO[9h_12h[_txcouv` < 5, `.3_JO[9h_12h[_txcouv`]
if(!is_empty(ratio_3)){voy_tranches[3,1] <- paste(voy_tranches[3,1], footnote_marker_symbol(1))}

ratio_4 <- JO_ratio_tranches[`.4_JO[12h_15h30[_txcouv` < 5, `.4_JO[12h_15h30[_txcouv`]
if(!is_empty(ratio_4)){voy_tranches[4,1] <- paste(voy_tranches[4,1], footnote_marker_symbol(1))}

ratio_5 <- JO_ratio_tranches[`.5_JO[15h30_18h[_txcouv` < 5, `.5_JO[15h30_18h[_txcouv`]
if(!is_empty(ratio_5)){voy_tranches[5,1] <- paste(voy_tranches[5,1], footnote_marker_symbol(1))}

ratio_6 <- JO_ratio_tranches[`.6_JO[18h_20h[_txcouv` < 5, `.6_JO[18h_20h[_txcouv`]
if(!is_empty(ratio_6)){voy_tranches[6,1] <- paste(voy_tranches[6,1], footnote_marker_symbol(1))}

ratio_7 <- JO_ratio_tranches[`.7_JO[20h_22h[_txcouv` < 5, `.7_JO[20h_22h[_txcouv`]
if(!is_empty(ratio_7)){voy_tranches[7,1] <- paste(voy_tranches[7,1], footnote_marker_symbol(1))}

ratio_8 <- JO_ratio_tranches[`.8_JO[22h_4h[_txcouv` < 5, `.8_JO[22h_4h[_txcouv`]
if(!is_empty(ratio_8)){voy_tranches[8,1] <- paste(voy_tranches[8,1], footnote_marker_symbol(1))}

OK!

for(i in JO_ratio_tranches[, grep("txcouv", names(JO_ratio_tranches))]){
ratio[[i]] <- JO_ratio_tranches[JO_ratio_tranches[[i]] < 5, ]
if(!is_empty(ratio[[i]])){voy_tranches[i, 1] <- paste(voy_tranches[i, 1], footnote_marker_symbol(1))}
}

Ошибка в eval (expr, envir, enclos): objet 'ratio' introuvable Вызовы:… handle -> withCallingHandlers -> withVisible -> eval -> eval

R не находит объект "коэффициент"! :( Не могли бы вы помочь мне исправить это для цикла?

РЕДАКТИРОВАТЬ: @ user2554330 найти решение, добавив коэффициент <- list () перед циклом, но возникает другая проблема:цикл только распечатать результаты последнего цикла!: (</strong>

Спасибо всем за помощь!

1 Ответ

0 голосов
/ 29 сентября 2019

Вам необходимо создать список ratio, прежде чем начать добавлять в него элементы. Просто добавьте строку

ratio <- list()

перед циклом, и все будет хорошо. (Конечно, я не могу проверить этот совет, потому что вы не опубликовали воспроизводимый пример ...)

Отредактировано, чтобы добавить: Теперь пример воспроизводим (после того, как немного поигрался со значениями dput длясделать их пригодными для использования). Проблема в вашем цикле for:

 for(i in JO_ratio_tranches[, grep("txcouv", names(JO_ratio_tranches))])

Стандартная форма для цикла for:

 for(i in v)

, где v - вектор, но вы даете

 JO_ratio_tranches[, grep("txcouv", names(JO_ratio_tranches))]

который не является вектором. Я не уверен, что вы собираетесь здесь;может быть, вы хотите

 for(i in grep("txcouv", names(JO_ratio_tranches)))

вместо?

...