2

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

我已经尝试过这里的建议:R Can 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

有想法该怎么解决这个吗?

4

3 回答 3

2

无法使用 ssh 从 R 中直接打开文件,但您可以使用一些选项。

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

有一些软件包可以让您通过 ssh 将远程机器作为本地文件系统挂载;例如,在 Linux 上,您可以使用sshfs,而在 Windows 上,您可以使用win-sshfs. 安装远程文件系统后,您将能够像访问任何其他文件一样从 R 访问 netcdf 文件,尽管我不确定性能影响可能是什么。

2. 将较大的文件分解成较小的文件。

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

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

small.cdl 将是一个文本文件;您可以使用以下命令生成二进制 netcdf.nc文件ncgen

$ ncgen -b -o 较小的.nc 较小的.cdl

  • 可以在此处找到 ncdump 使用示例:http ://www.unidata.ucar.edu/software/netcdf/workshops/2012/utilities/NcdumpExamples.html2 。

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

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

于 2013-08-02T19:04:24.677 回答
1

I'd try and arrange a samba or NFS share. After that you can simply approach the file as any other.

于 2013-07-31T16:23:26.873 回答
1

不可能通过 ssh 来实现。该pipe命令执行一个 shell 命令。您正在尝试执行path/to/file/foo.nc,但由于它不是可执行文件而失败。您给出的示例从标准输入读取输出,由 R 解析。这不一样。

您可以获得的最接近的是ncdump在远程机器上使用,它可用于将文件中的变量转换为您可以解析的文本版本。

于 2013-07-31T16:38:21.273 回答