读取存储在R中的远程文件系统中的netCDF文件?

时间:2013-07-31 15:53:48

标签: r ssh netcdf

我需要将一个netCDF文件读入存储在远程文件系统中的R中。我确实有ssh访问文件系统,但文件太大,无法存储到我的本地计算机上。

我已经尝试过这里的建议:Can R read from a file through an ssh connection?我尝试了以下内容:

library(ncdf)
d = open.ncdf(pipe('ssh hostname "path/to/file/foo.nc"'))

但是,我一直收到错误

bash: path/to/file/foo.nc: Permission denied

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:2)

使用ssh无法直接在R中打开文件,但有几个选项可用。

1。通过ssh将远程服务器挂载为本地文件系统。

有些软件包可以让您通过ssh将远程计算机挂载为本地文件系统;例如,在Linux上,您可以使用sshfs,而在Windows上,您可以使用win-sshfs。一旦你安装了远程文件系统,就可以像访问任何其他文件一样从R访问netcdf文件,尽管我不确定性能可能带来什么。

2。将较大的文件分解为较小的文件。

使用服务器上的命令行ncdump实用程序从大文件创建较小的文件,这些文件能够适合您的本地文件系统。

  

$ ncdump -v [var1],[var2] big.nc> smaller.cdl

smaller.cdl将是一个文本文件;您可以使用.nc生成二进制netcdf ncgen文件:

  

$ ncgen -b -o smaller.nc smaller.cdl

3。在远程服务器上使用OpenDAP服务。

除非您的远程服务器已设置为提供OpenDAP服务,否则这可能是过度的。但如果是,您可以使用R的OPeNDAP访问和netCDF的OPenDAP子集服务的组合来动态检索数据子集。您还可以使用本地计算机上的ncdump从服务器请求数据子集。

答案 1 :(得分:1)

我会尝试安排samba或NFS共享。之后,您可以像处理任何其他文件一样处理文件。

答案 2 :(得分:1)

通过ssh无法做到这一点。 pipe命令执行shell命令。您正在尝试执行path/to/file/foo.nc,因为它不是可执行文件而失败。您给出的示例从stdin读取输出,由R解析。这是不一样的。

最接近的是在远程计算机上使用ncdump,可用于将文件中的变量转换为文本版本,您可以对其进行解析。