Хорошо, наконец, я решил написать функцию для этой цели. Он работает довольно хорошо, за исключением примера вектора, но я понятия не имею, почему, если кто-то может помочь, это было бы здорово.
AlignDec <- function(df, originalvar, newvar) {
require(dplyr)
originalvar <- enquo(originalvar) %>% quo_name()
newvar <- enquo(newvar) %>% quo_name()
decimalnumcount <- function(x) {
out <- ifelse((x %% 1 != 0), nchar(strsplit(sub('.0+$', '', as.character(x)), ".", fixed = TRUE)[[1]][[2]]), 0)
return(out)
}
IntNumCount <- function(x) {
out <- nchar(as.character(trunc(x)))
return(out)
}
df <- df %>% mutate(n_int = IntNumCount(.data[[originalvar]]), n_dec = decimalnumcount(.data[[originalvar]]), maxnint = max(n_int), maxndec = max(n_dec),
intpos = (maxnint - n_int), !!newvar := paste0(strrep(" ",intpos), prettyNum(.data[[originalvar]]))) %>%
select(-one_of(c("n_int", "n_dec", "maxnint", "maxndec", "intpos")))
return(df)
}
Если я тестирую эти 2 кадра данных, это работает в первом случае, но не во втором, и я понятия не имею, почему!
testok <- data.frame(y = c(12.1, 2, 0, 17, 1000.1, 57))
testnotok <- data.frame(y = c(2,120, 12.5, 100.25, 0.1))
test1 <- AlignDec(testok, y, z)
test2 <- AlignDec(testnotok, y, z)
test2 возвращает мне это сообщение об ошибке:
Error in mutate_impl(.data, dots) :
Evaluation error: subscript out of bounds.
Есть идеи?