Мы можем использовать [[
вместо &
, как с $
, он ищет столбец с именем «col1» или «col2» вместо значения, связанного с аргументом
fun1 <- function(dataset,col1,col2) {
levels(dataset[[col1]]) <- c(levels(dataset[[col1]]), "ABC")
dataset[[col1]][dataset[[col2]]==2] <- "ABC"
return(dataset)
}
fun1(df, "B", "A")
# A B C
#1 1 USA 1999
#2 2 ABC 1999
#3 3 GER 1999
#4 3 GER 1999
df <- structure(list(A = c(1L, 2L, 3L, 3L), B = structure(c(2L, NA,
1L, 1L), .Label = c("GER", "USA"), class = "factor"), C = c(1999L,
1999L, 1999L, 1999L)), row.names = c(NA, -4L), class = "data.frame")
Я выяснил обходное решение, которое позволяет мне добавлять каждого User.Status
возразите против Скоростного контекста, который избегает любого вида ссылок на константы или магические числа в шаблоне.
На стороне контроллера/Java:
// put the statuses directly into the model
Map statusMap = new HashMap();
statusMap.put("user", User.Status.USER);
statusMap.put("groupOperator", User.Status.ADMIN);
...
modelAndView.addObject("statusmap", statusMap);
И затем в шаблоне как эти значения можно сослаться так:
#if($user.status == $statusmap.user)
You are a regular user
#elseif($user.status == $statusmap.admin)
You are an administrator
##etc...
#end
Да, Скорость не делает исходно grok классов и пакетов. Вы могли сделать то, что Вы сделали или используете класс FieldMethodizer для автоматизации этого. Другой опцией был бы FieldTool в VelocityTools 2.0.
Попробуйте использовать FieldMethodizer of Velocity, это не лучшее решение, но вы можете что-то сделать.
С помощью этого класса вы можете вызывать статические общедоступные константы, см. Ссылку: