2017-05-08 166 views
2

我試圖從FTP服務器上下載一些文件到我的本地。我已經成功地使用以下方法從服務器移動.txt和.csv文件,但不需要我需要的.sas7bdat文件。使用R從ftp服務器下載SAS文件

protocol <- "sftp" 
server <- "ServerName" 
userpwd <- "User:Pass" 
tsfrFilename <- "/filepath/file.sas7bdat" 
ouptFilename <- "out.sas7bdat" 

# Run # 
## Download Data 
url <- paste0(protocol, "://", server, tsfrFilename) 
data <- getURL(url = url, userpwd=userpwd) 

## Create File 
fconn <- file(ouptFilename) 
writeLines(data, fconn) 
close(fconn) 

當我運行的getURL命令,但是,我遇到了以下錯誤:

Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
    embedded nul in string: 

有誰知道,我可以從FTP服務器下載sas7bdat文件的任何替代方法到我的本地,或者如果有辦法改變我的代碼在下面成功下載文件。謝謝!

+1

嘗試'getBinaryURL()'代替。二進制數據更安全。 – MrFlick

+0

'download.file()'? – Parfait

+0

@MrFlick我能夠使用你提到的功能來完成特定的步驟。然而,writeLines函數給了我錯誤信息「invalid」text'argument「 –

回答

0

正如@MrFlick建議的那樣,我使用getBinaryURL而不是getURL()來解決此問題。另外,我不得不使用功能write()而不是writeLines()。其結果如下:

protocol <- "sftp" 
server <- "ServerName" 
userpwd <- "User:Pass" 
tsfrFilename <- "/filepath/file.sas7bdat" 
ouptFilename <- "out.sas7bdat" 

# Run # 
## Download Data 
url <- paste0(protocol, "://", server, tsfrFilename) 
data <- getBinaryURL(url = url, userpwd=userpwd) 

## Create File 
fconn <- file(ouptFilename) 
write(data, fconn) 
close(fconn) 

可替代地,所讀取的數據轉換成R數據幀中,可以使用該庫haven,如下

library(haven) 
df_data= read_sas(data) 
相關問題