使用R从ftp-server下载SAS文件

时间:2017-05-08 20:41:49

标签: r download ftp rcurl

我正在尝试从ftp-server下载一些文件到我的本地。我已成功使用以下方法从服务器移动.txt和.csv文件,但不是我需要的.sas7bdat文件。

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 个答案:

答案 0 :(得分:2)

正如@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)