2017-05-08 267 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) 
相关问题