2016-11-02 50 views
1

我有一個函數可以逐行讀入非常大的文本文件。 在使用我的功能之前,我創建了一個填充了NA的列表。如何存儲要在函數外部使用的值

該功能在特定條件滿足時將+1添加到列表中的特定位置。但是這種方式只能在函數中使用。如果我在應用後列出我的列表,則會再次顯示初始列表(填入NA)。

如何將這些值存儲爲可以在函數外部使用的值?

lion<-lapply(1, function(x) matrix(NA, nrow=2500, ncol=5000))

processFile = function(filepath) { 
    con = file(filepath, "rb") 

    while (TRUE) { 
    line = readLines(con, n = 1) 
    if (length(line) == 0) { 
     break 
    } 
    y <- line 
    y2 <- strsplit(y, "\t") 
    x <- as.numeric(unlist(y2)) 
    if(x[2] <= 5000 & x[3] <= 2500) { 

    lion[[1]][trunc(x[3] + 1), trunc(x[2])] <- lion[[1]][trunc(x[3] + 1), trunc(x[2])] 
    } 
    } 

    close(con) 

} 
+3

難道你不能返回輸出並將其寫入一個變量,如返回(獅子)? –

回答

0

您可能已返回列表,你的函數的最後一部分:

processFile = function(filepath) { 
    con = file(filepath, "rb") 

    while (TRUE) { 
    line = readLines(con, n = 1) 
    if (length(line) == 0) { 
     break 
    } 
    y <- line 
    y2 <- strsplit(y, "\t") 
    x <- as.numeric(unlist(y2)) 
    if(x[2] <= 5000 & x[3] <= 2500) { 

    lion[[1]][trunc(x[3] + 1), trunc(x[2])] <- lion[[1]][trunc(x[3] + 1), trunc(x[2])] 
    } 
    } 

    close(con) 
    return(lion) 
} 

這樣,您就可以調用與lion <- processFile(yourfile)

你的函數或者,您可以在執行該功能時將列表分配給.GlobalEnv:

processFile = function(filepath) { 
    con = file(filepath, "rb") 

    while (TRUE) { 
    line = readLines(con, n = 1) 
    if (length(line) == 0) { 
     break 
    } 
    y <- line 
    y2 <- strsplit(y, "\t") 
    x <- as.numeric(unlist(y2)) 
    if(x[2] <= 5000 & x[3] <= 2500) { 

    lion[[1]][trunc(x[3] + 1), trunc(x[2])] <- lion[[1]][trunc(x[3] + 1), trunc(x[2])] 
    } 
    } 

    close(con) 
    assign("lion", lion, envir = .GlobalEnv) 
}