Прежде всего обратите внимание, что проблема с кодом - это порядок операций. %>%
выполняется до ==
, но мы хотим, чтобы ==
выполнялось до последнего %>%
, поэтому используйте скобки, чтобы форсировать это. Внутренние скобки, показанные здесь, на самом деле не нужны, поскольку порядок операций по умолчанию для них уже работает; однако мы добавили их в дополнение к тем, которые необходимы для ясности. См. ?Syntax
для полной таблицы, в которой указан порядок операций.
sapply(df,function(x) ((x %>% na.omit %>% as.character %>% nchar) == 8) %>% all)
## dates1 dates2
## TRUE FALSE
однако, это может быть лучше написано следующим образом, используя факты, которые:
nchar
уже приводит свой аргумент к символу, поэтому мы можем исключить as.character
. %>% whatever
может использоваться для определения функции wjere whatever
заменяется телом функции, предполагая, что единственным аргументом является точка (.)
{...}
может использоваться для предотвращения автоматического. Вставка:
дает:
df %>% sapply(. %>% na.omit %>% { nchar(.) == 8 } %>% all)
## dates1 dates2
## TRUE FALSE
или, если то, что нужно, это одна логика для всех столбцов, то:
p <- df %>% sapply(na.omit) %>% { nchar(.) == 8 }
p %>% all
## [1] FALSE
p %>% any
## [1] TRUE