Я написал функцию для одной из моих обычных задач.Я просто попытаюсь повторить мою проблему.Ниже приведен случайный пример того, как выглядят мои данные.Теперь это вывод функции dput (mydataframe)
structure(list(respid = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), ssd = c(0,
225, 236, 0, 221, 0, 0, 269, 265, 0), tea = c(228, 0, 269, 0,
258, 241, 0, 222, 0, 256), juice = c(0, 236, 0, 236, 236, 0,
236, 225, 242, 296), vad = c(236, 235, 0, 235, 235, 0, 235, 258,
0, 236), energy = c(0, 235, 236, 235, 0, 236, 235, 0, 236, 0)), .Names = c("respid",
"ssd", "tea", "juice", "vad", "energy"), row.names = c(NA, -10L
), class = c("tbl_df", "tbl", "data.frame"))
. Теперь моя цель - написать функцию для фильтрации ненулевых строк в столбце ssd.Тогда это будет выглядеть так:

Я написал следующую функцию в R
SoT <- function(df,key) {
df2 <- df %>% dplyr::filter(key > 0)
df3 <- janitor::adorn_totals(df2, where = "row")
df4 <- tail(df3,1) %>% janitor::adorn_percentages(denominator = "row") %>% janitor::adorn_pct_formatting()
return(df4)
}
Мой желаемый результат - это только процентсуммирования итогов столбца (после фильтрации по ssd> 0).В приведенной выше функции я просто даю функции 2 входа.1 - это датафрейм, а другое - «имя переменной», которое я хочу отфильтровать.Я вызываю функцию следующим образом:
SoT(df1, "ssd")
Мой желаемый результат на рисунке ниже - зеленый, но я получаю желтый.

Это означает, что «функция фильтра» в коде не работает.Но все работает нормально, если я использую его просто построчно, а не внутри функции.Любые предложения?
Я не удалил изображения (только для справки), но сделал данные и код воспроизводимыми в соответствии с предложением.