2017-06-27 17 views
0

我正在使用一個需要我加載「sam」文件的程序。但是,給出的代碼不會創建必需的data.file變量,而是會生成"",而不是空白。無法使用R中的system.file或file.path加載文件?

這是給予代碼:

data.file <- system.file(file.path('extdata', 'vignette-sam.txt'), package='flipflop') 

我把:

data.file <- system.file(file.path("Users", "User1", "Desktop", "Cond_18", 
            "Sorted_bam_files", "Cond_18_1.bam_sorted.sam"), 
         package='flipflop') 

的道路是完全正確和包名是flipflop。然而,每次我檢查變量data.file是什麼,它都會產生""。所以文件永遠不會被加載,腳本也不能運行。

我也把整個文件路徑爲它的一個版本:

data.file <- system.file('/Users/User1/Desktop/Cond_18/Sorted_bam_files/DBM_18_1.bam_sorted.sam', 
         package='flipflop') 

該版本不包括file.path,但它的腳本示例之一。

在使用這些變量的代碼行是這樣的:

if(preprocess.instance==''){ 
    print('PRE-PROCESSING sam file ....') 
    data.file <- path.expand(path=data.file) # In case there is a '~' in the input path 
    if(data.file==''){ print('Did you forget to give a SAM file?') ; return(NULL) } 
    annot.file <- path.expand(path=annot.file) 
    samples.file <- path.expand(path=samples.file) 

而且由於data.file是""則默認爲NULL

+0

我不認爲你很理解'system.file'的用途。從幫助文件中:「查找軟件包中文件的完整文件名稱」等。您正在從觸發器包中查找文件,還是僅僅是系統中的文件? – Dason

+0

'system.file'用於以獨立於平臺的方式構建與庫內包的基本目錄相關的調用,例如, 'read.csv(system.file('misc','exDIF.csv',package ='utils'))' – alistaire

回答

0

如果要引用的文件來自包,則使用system.file。以下是爲system.file幫助文件說:

查找在包裝等

你只是想引用你的機器上的文件的文件的完整文件名。你可以直接存儲路徑和使用,作爲您data.file

data.file <- "C:/path/to/your/file" 

腳本使用file.path,因爲它產生於獨立於平臺的方式路徑更安全的方式。例如:

> file.path("C:", "Users", "BotsRule", "Code", "myawesomeRscript.R") 
[1] "C:/Users/BotsRule/Code/myawesomeRscript.R" 

所以解決你的問題,只是確保你實際做東西只是什麼正確地指定到你的文件的路徑。

+0

非常感謝!手冊中的示例只有system.file作爲加載文件的可用方法,但只是將data.file作爲文件的直接路徑,它非常簡單,並且工作起來非常方便! –

+0

@ L.Li這些示例只能使用軟件包安裝的文件,以便它*需要*使用system.file來查找這些示例文件。 – Dason