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解释中返回https://stat.ethz.ch/R-manual/R-devel/library/utils/html/write.table.html。如果那样的话,我的方法就会失败。
一个拥有mac测试并发布mac (Sys.info()['sysname']:"Darwin")的人能输出吗?solaris ("SunOS")怎么样?
发布于 2016-11-23 11:21:38
我将对所有回车进行分割,在这样的情况下,使用一个正则表达式(包括两者)并过滤空条目(原因是\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"发布于 2016-11-23 13:53:07
一个更简洁的平台agnositc替代方案也使用了curl包:
library(curl)
readLines(curl(link, handle=new_handle(dirlistonly=TRUE, ftp_use_epsv=TRUE)))
## [1] "hourly" "daily" "monthly" "multi_annual" "subdaily"https://stackoverflow.com/questions/40762669
复制相似问题