R function masking scope conflict between data.table and lubridate -


edit: see simple fix below.


i'm running odd behavior. applying via lapply multiple functions within j expression of data.table works when explicitly name library in case 1. in case 2, if don't name library, works first time, if call same line second time, fails error message: error in fun(x[[i]], ...) : not find function "f"

# case 1 unloadnamespace('data.table') unloadnamespace('lubridate') require(data.table) require(lubridate) dt <- data.table(x=as.posixct("2013-01-01 00:53:00", tz="japan")) dt[, c('year','month', 'day') := lapply(c(lubridate::year, lubridate::month, lubridate::day), function(f) f(x) )] # passes dt[, c('year','month', 'day') := lapply(c(lubridate::year, lubridate::month, lubridate::day), function(f) f(x) )] # passes  # case 2 unloadnamespace('data.table') unloadnamespace('lubridate') require(data.table) require(lubridate) dt <- data.table(x=as.posixct("2013-01-01 00:53:00", tz="japan")) dt[, c('year','month', 'day') := lapply(c(year, month, day), function(f) f(x) )] # passes dt[, c('year','month', 'day') := lapply(c(year, month, day), function(f) f(x) )] # fails 

what's causing strange behavior? there solution other explicit scoping lubridate::function?


edit:

as per @frank's comment below, problem data.table interpreting year , month referencing columns instead of lubridate functions. changing column names fixed it:

# case 2 unloadnamespace('data.table') unloadnamespace('lubridate') require(data.table) require(lubridate) dt <- data.table(x=as.posixct("2013-01-01 00:53:00", tz="japan")) dt[, c('y1','y2', 'y3') := lapply(c(year, month, day), function(f) f(x) )] # passes dt[, c('y1','y2', 'y3') := lapply(c(year, month, day), function(f) f(x) )] # passes 

however, per @frankh's comment, it's best explicitly specify lubridate::function remove doubt on of 2 packages masked other.


Comments

Popular posts from this blog

php - Permission denied. Laravel linux server -

google bigquery - Delta between query execution time and Java query call to finish -

python - Pandas two dataframes multiplication? -