2012-06-27 53 views
0

我有一個嵌套函數的問題,不能找出原因,因爲我把它放在其他函數內的代碼之前。 如果我運行的代碼裏面的主要功能一切都很好,但如果我調用的函數,我得到「無法找到函數‘InstanceFromLocation’使用嵌套函數「找不到函數」

MatchLocationsInstances = function (resultSheet1) { 
    #load required libraries 
    require(plyr) 
    #declare functions 
    InstanceFromLocation = function (v_string) { 
    #load libraries 
    require(stringr) 
    require(gdata) 
    #variables 
    stringLenth = nchar(v_string) 
    #find positions of the ":" 
    v_positions = data.frame(str_locate_all(v_string, ':'), stringsAsFactors = F) 
    positions_length = length(v_positions[, 1]) 
    #substract and trim the result if there are entries in v_positions 
    if (positions_length != 0) { 
     result = trim(substr(v_string, v_positions[positions_length, 1] + 1, stringLenth)) 
    } else { 
     result = '' 
    } 
    return(result) 
    } 

    #add a new dataframe with 
    tmpResult = ddply(resultSheet1, .(`Col 1`), transform, FromLocation = toupper(InstanceFromLocation(`Col 1`)))[, 2:9] 

    return(tmpResult) 
    } 

reproductible數據集

   resultSheet1 = structure(list(`File Name` = c("file_name2.txt", 
      "file_name.txt", "file_name.txt", 
      "file_name.txt", "file_name.txt", 
      "file_name.txt"), `Col 1` = c("sometext2", 
      "sometext2", "sometext2", "sometext2", "sometext2", "sometext2"), Hostname = c("sometext", 
      "sometext", "sometext", "sometext", "sometext", 
      "sometext"), `Schema Name` = c("schema", "schema", 
      "schema", "schema", "schema", "schema"), 
       `text Targets` = c("***File Error!***", "sometext_LOCATION/sometext/sometext:port:sometext2 ", 
       "sometext5// :port:sometext2 ", "sometext3/sometext3/sometext:port:sometext2 ", 
       "sometext4/textI/sometext:port:sometext2 ", "textI_LOCATION/textI/sometext:port:sometext2 " 
       ), `Number of Objects Deployed` = c(963, 963, 963, 963, 963, 
       963), `No. of jobs that were run on this instance` = c(342623, 
       337803, 337803, 337803, 337803, 337803)), .Names = c("File Name", 
      "Col 1", "Hostname", "Schema Name", "text Targets", 
      "Number of Objects Deployed", "No. of jobs that were run on this instance" 
      ), row.names = c(NA, 6L), class = "data.frame") 

回答

1

InstanceFromLocation只被定義在函數MatchLocationsInstances內,你可以聲明它在主函數之外

InstanceFromLocation = function (v_string) { 
    #load libraries 
    require(stringr) 
    require(gdata) 
    #variables 
    stringLenth = nchar(v_string) 
    #find positions of the ":" 
    v_positions = data.frame(str_locate_all(v_string, ':'), stringsAsFactors = F) 
    positions_length = length(v_positions[, 1]) 
    #substract and trim the result if there are entries in v_positions 
    if (positions_length != 0) { 
     result = trim(substr(v_string, v_positions[positions_length, 1] + 1, stringLenth)) 
    } else { 
     result = '' 
    } 
    return(result) 
    } 

MatchLocationsInstances = function (resultSheet1) { 
    #load required libraries 
    require(plyr) 
    #declare functions 

    #add a new dataframe with 
    tmpResult = ddply(resultSheet1, .(`Col 1`), transform, FromLocation = toupper(InstanceFromLocation(`Col 1`)))[, 2:9] 

    return(tmpResult) 
    } 
+0

但我希望它使用嵌套函數。它應該能夠看到它。我之前使用過嵌套函數,而我沒有這個問題。這個特定功能有什麼問題? –

+0

嗨@ttmaccer。感謝你的回答。我知道範圍文件。你能解釋爲什麼我的嵌套函數超出範圍嗎?我在主函數中聲明它,它應該看到它,但它返回錯誤。 –

+0

我編輯了我的第一篇文章,併爲數據集 –