Если вы не против использовать C ++ 11, вот умный помощник, который похож на (но менее уродливый, чем) статический кастинг:
template
auto resolve(R (T::*m)(Args...)) -> decltype(m)
{ return m; }
template
auto resolve(R (T::*m)(void)) -> decltype(m)
{ return m; }
(Работает для функций-членов; быть очевидным, как изменить его, чтобы работать для автономных функций, и вы должны быть в состоянии предоставить обе версии, а компилятор выберет правильный для вас.)
Благодаря Miro Knejp за предложение: см. Также https://groups.google.com/a/isocpp.org/d/msg/std-discussion/rLVGeGUXsK0/IGj9dKmSyx4J .
В этом случае вам не обязательно нужен purrr
. Вы можете использовать dplyr
library(dplyr)
mutate_at(mtcars, c("am", "gear"), as.character)
В этом случае вам не обязательно нужен dplyr
. Вы можете использовать base R
:
cols <- c("am", "gear")
mtcars[cols] <- lapply(mtcars[cols], as.character)