我在可變深度的調用堆棧看起來像通過函數名查找調用堆棧中的父環境
TopLevelFunction
-> <SomeOtherFunction(s), 1 or more>
-> AssignmentFunction
現在,我的目標是在分配創建AssignmentFunction
可變的工作,對環境TopLevelFunction
。我知道我可以sys.calls
提取棧,所以我目前的做法是
# get the call stack and search for TopLevelFunction
depth <- which(stringr::str_detect(as.character(sys.calls()), "TopLevelFunction"))
# assign in TopLevelFunction's environment
assign(varName, varValue, envir = sys.frame(depth))
我有更多或更少的罰款,但我不知道,如果這對通話對象轉換爲特徵向量是一個好主意。這種方法容易出錯嗎?更一般地說,如果僅僅知道函數的名字,你將如何搜索一個特定的父環境?
好主意,但如果我在'AssignmentFunction'和'TopLevelFunction'之間嵌套更多函數,它將無法正常工作。在我的情況,調用堆棧可能,說,3個或5個功能深,所以我不得不提取出完整的堆棧。至於全球分配,它通常是在因爲會影響全局狀態皺起了眉頭,所以我會盡我所能來避免它。 – tonytonov
啊,我明白了,那麼如果你遞歸地獲得父環境,直到到達全球環境之前呢?。,...,這裏的代碼看起來很糟糕,所以我會發布另一個答案... – elikesprogramming