我需要将一个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
有关如何解决此问题的任何想法?
答案 0 :(得分:2)
使用ssh无法直接在R中打开文件,但有几个选项可用。
有些软件包可以让您通过ssh将远程计算机挂载为本地文件系统;例如,在Linux上,您可以使用sshfs
,而在Windows上,您可以使用win-sshfs
。一旦你安装了远程文件系统,就可以像访问任何其他文件一样从R访问netcdf文件,尽管我不确定性能可能带来什么。
使用服务器上的命令行ncdump
实用程序从大文件创建较小的文件,这些文件能够适合您的本地文件系统。
$ ncdump -v [var1],[var2] big.nc> smaller.cdl
smaller.cdl将是一个文本文件;您可以使用.nc
生成二进制netcdf ncgen
文件:
$ ncgen -b -o smaller.nc smaller.cdl
除非您的远程服务器已设置为提供OpenDAP服务,否则这可能是过度的。但如果是,您可以使用R的OPeNDAP访问和netCDF的OPenDAP子集服务的组合来动态检索数据子集。您还可以使用本地计算机上的ncdump
从服务器请求数据子集。
答案 1 :(得分:1)
我会尝试安排samba或NFS共享。之后,您可以像处理任何其他文件一样处理文件。
答案 2 :(得分:1)
通过ssh无法做到这一点。 pipe
命令执行shell命令。您正在尝试执行path/to/file/foo.nc
,因为它不是可执行文件而失败。您给出的示例从stdin读取输出,由R解析。这是不一样的。
最接近的是在远程计算机上使用ncdump
,可用于将文件中的变量转换为文本版本,您可以对其进行解析。