2017-07-26 113 views
1

我試圖修改r包中的qgraph()函數qgraph以對圖形參數進行一些重大更改。但在嘗試進行這些修改之前,我已經訪問了該函數的源代碼並將其作爲新函數重新加載(即qgraph2())並在big5示例數據上運行它。我收到的錯誤是could not find function "getArgs",我懷疑getArgs是一個隱藏函數。 但是,我無法在qgraph環境或r全局環境中找到getArgs(),也無法在任何r文檔中找到它的任何記錄(?getArgs,??getArgs),所以我不知道從哪裏調用它或如何找出那些信息。此外,我懷疑潛伏在qgraph()函數中的隱藏函數更多。 所以我的問題是雙重的:首先,我怎樣才能找出getArgs()被隱藏的地方並相應地訪問它;其次,有沒有辦法允許我修改後的函數qgraph2訪問所有這些隱藏的對象,而無需單獨調用它們。 謝謝。如何訪問隱藏得很好的隱藏函數

+0

'?assignInNamespace' – Roland

+1

也'?getAnywhere' – Roland

回答

3

如果你知道你的功能在哪裏隱藏,你可以使用:::操作符來查看它的代碼。如果您不知道,請使用getAnywhere。它還會告訴你在哪裏尋找功能。

getAnywhere(getArgs) 
A single object matching ‘getArgs’ was found 
It was found in the following places 
    namespace:qgraph 
with value 

function (args) 
{ 
    if (length(args) > 0) { 
     isqgraph <- sapply(args, function(x) "qgraph" %in% class(x)) 
     argLists <- c(lapply(args[isqgraph], "[[", "Arguments"), 
      lapply(args[isqgraph], "[", "layout")) 
     args <- args[!isqgraph] 
     newArgs <- lapply(argLists, getArgs) 
     for (l in newArgs) args <- c(args, l[!names(l) %in% names(args)]) 
    } 
    return(args) 
} 
<bytecode: 0x000000001e900d50> 
<environment: namespace:qgraph> 




> qgraph:::getArgs 
function (args) 
{ 
    if (length(args) > 0) { 
     isqgraph <- sapply(args, function(x) "qgraph" %in% class(x)) 
     argLists <- c(lapply(args[isqgraph], "[[", "Arguments"), 
      lapply(args[isqgraph], "[", "layout")) 
     args <- args[!isqgraph] 
     newArgs <- lapply(argLists, getArgs) 
     for (l in newArgs) args <- c(args, l[!names(l) %in% names(args)]) 
    } 
    return(args) 
} 
<bytecode: 0x000000001e900d50> 
<environment: namespace:qgraph> 
+0

完美,現在我可以調用使用qgraph功能:::謝謝。 – Robert