충돌하는 패키지가 내 패키지가 아닌 경우 마스킹을 처리하는 가장 좋은 방법이 올바른 방법으로 충돌하는지 궁금합니다. 다음 예제를 고려하십시오. 나는 시계열 과 함께 일을 많이하며 일반적으로 quarter, year 등과 같은 함수 이름이 꽤 자주 사용됩니다. 따라서 과 data.table
을로드하면 R의 기능은 패키지가로드되는 순서에 따라 분명히 다릅니다.R 패키지의 마스킹 충돌을 올바르게 처리하는 방법은 무엇입니까?
library(tis)
library(data.table)
# this masks: between, month, quarter, year
library(TSfame) # loads TSdbi
con <- TSconnect("somefame.db")
# the following fails when data.table was loaded after tis
ts1 <- TSget("somekeyInYourDB",con)
및 TSdbi
패키지의 TSget이 더 이상 작동하지 않습니다. 패키지를 포크하고 ::
구문을 구현해야합니까? 예는 구체적 일지 모르지만 질문은 꽤 일반적입니다. 경험 많은 사용자는 무엇을 할 것입니까?
편집 : 아마도 이것을 더 명확하게 명시해야합니다. 문제는 TSget이 명시 적으로 호출되어야하는 함수를 호출하기 때문에 함수를 명시 적으로 호출 할 기회가 없으며 오직 tis 만 있다고 가정합니다.
EDIT2는 리치면의 요청에 따라 호출 스택을 첨가하는 것은 :
Tracing year(actualStart) on entry
[[1]]
TSget("kofbauindikator_total", con)
[[2]]
TSget("kofbauindikator_total", con)
[[3]]
.local(serIDs, con, ...)
[[4]]
getfame(serIDs[i], dbname[i], save = FALSE, envir = parent.frame(),
start = NULL, end = NULL, getDoc = FALSE)
[[5]]
year(actualStart)
[[6]]
.doTrace((function()
print(sys.calls()))(), "on entry")
[[7]]
eval.parent(exprObj)
[[8]]
eval(expr, p)
[[9]]
eval(expr, envir, enclos)
[[10]]
(function()
print(sys.calls()))()
Error in as.POSIXlt.default(x) :
do not know how to convert 'x' to class “POSIXlt”
'TSget'은 충돌 함수 중 'quarter'를 호출하지 않으므로 여기에 뭔가 빠졌습니다. 문제는 (1)'TSfame'의 함수가'tis'에서 함수를 호출하지만'data.table'에서 함수를 호출하려고하거나 (2)'TSfame'의 함수가 때때로 함수를 'tis'에 쓰고 때로는'data.table'에서'search()'경로에 따라 함수를 호출할까요? –
문제는 'TSget'이 '분기'또는 충돌하는 함수 중 하나를 호출한다는 것입니다. data.table을로드하지 않으면 모든 것이 작동합니다. data.table을 호출하면 tis 함수 대신 4 개의 마스크 함수 중 하나가 호출됩니다. 그래서 2) 실제로 내 문제입니다. –
'TSfame'은 TSdbi를 가져 오는 것이 아니라 가져 오는 것이 좋다고 생각합니다 (http://stackoverflow.com/q/8637993/134830 참조). 문제를 쉽게 확인하도록하십시오. –