RCurl在Mac上返回什么换行符?

时间:2016-11-23 11:03:04

标签: r

RCurl返回Windows和Linux系统上ftp目录的不同换行符。

if(!requireNamespace("RCurl", quietly=TRUE)) install.packages("RCurl")
link <- "ftp://ftp-cdc.dwd.de/pub/CDC/observations_germany/climate"
RCurl::getURL(link, ftp.use.epsv=TRUE, dirlistonly=TRUE)
Sys.info()['sysname'] ; .Platform$OS.type

# Windows / windows: "climate\r\nphenology\r\nradiosondes\r\nclimate_urban\r\n"
# Linux / unix: "climate\nphenology\nradiosondes\nclimate_urban\n"

要获得字符串向量,我可以使用

处理
p <- strsplit(p, "\n")[[1]]
p <- gsub("\r", "", p) # additional carriage return in windows libcurl

但是:似乎mac只能从https://stat.ethz.ch/R-manual/R-devel/library/utils/html/write.table.html中的eol解释返回\r。在那种情况下,我的方法会失败。

有人可以使用mac测试并发布mac(Sys.info()['sysname']:&#34; Darwin&#34;)输出? solaris怎么样(&#34; SunOS&#34;)?

2 个答案:

答案 0 :(得分:1)

我会在所有回车上拆分,包含两个正则表达式并过滤空条目(由\ n \ r进行两次拆分导致),如下所示:

t<-"climate\r\nphenology\r\nradiosondes\r\nclimate_urban\r\n"
t1<-"climate\nphenology\nradiosondes\nclimate_urban\n" 

 p<-unlist(strsplit(t,"[\n\r]"))
 p<-p[nchar(p)>0]

 p1<-unlist(strsplit(t1,"[\n\r]"))
 p1<-p[nchar(p1)>0]

哪个给:

> p
[1] "climate"       "phenology"     "radiosondes"   "climate_urban"
> p1
[1] "climate"       "phenology"     "radiosondes"   "climate_urban"

答案 1 :(得分:0)

更简洁的平台agnositc替代方案,也使用curl包:

library(curl)
readLines(curl(link, handle=new_handle(dirlistonly=TRUE, ftp_use_epsv=TRUE)))
## [1] "hourly"       "daily"        "monthly"      "multi_annual" "subdaily"