4

我有一个巨大的原始数据文件,我不打算更改或复制。我有两个项目RStudio,都需要能够访问它。

我最初通过以下方式创建别名(在 MacOS 中)右键单击~/A/data.csvfinder 中的文件,然后单击“制作别名”。然后将别名复制到~/B/并重命名~/B/data.csv

我后来也尝试了以下命令 ln -s ~/A/data.csv ~/B

对于项目 A,我将实际数据文件放在 A/data/data.csv 中。
对于项目 B,我在 B/data/ 下创建了一个别名。

但是当我尝试 fread('B/data/data.csv') 时,它抱怨:

sh: ./data/data.csv: 符号链接的级别太多

fread("./data/data.csv") 中的错误:

文件为空:/var/folders/4h/2jg64xk52mv3fyq4sb7s371w0000gn/T//Rtmp7cWNN3/filebf3013ad9194

我想我可以使用硬链接来解决这个问题,但只是想看看我是否可以使用别名来使其工作。

===== 我认为这并不重要,但为了完整起见,请参阅以下内容了解我的操作系统和 R 版本:

platform       x86_64-apple-darwin10.8.0   
arch           x86_64                      
os             darwin10.8.0                
system         x86_64, darwin10.8.0        
status                                     
major          3                           
minor          1.0                         
year           2014                        
month          04                          
day            10                          
svn rev        65387                       
language       R                           
version.string R version 3.1.0 (2014-04-10)
nickname       Spring Dance    
4

1 回答 1

0

我不完全确定为什么在这种特定情况下使用别名:

  • 请注意,对于小文件(例如 < 1 MB),别名可能会占用更大的内存。例如,对于包含“test”(echo "test" > test.txt)的简单文本文件,别名将大 274k 倍:

test.txt:5 个字节

test.txt 别名:1372636 字节

  • 既然 RStudio 擅长使用绝对路径,为什么不直接链接到~/A/data.csv直接而不是链接到它的别名呢?

两种替代解决方案(不直接回答问题)可能是(1)复制文件或(2)创建一种符号链接。

复制文件

#!/bin/bash
mkdir ~/B/data/
cp ~/A/data.csv ~/B/data/

或在 中R,使用system(在 Mac 上):

system("mkdir ~/B/data/")
system("cp ~/A/data.csv ~/B/data/")

创建符号链接

这可以通过简单地将文件的路径保存~/A/data.csv~/B/data/.

在外壳中:

#!/bin/bash
mkdir ~/B/data/
echo "~/A/data.csv" > ~/B/data/data.csv

(这部分也可以像上面那样R使用system())然后,在R

## Reading path in B/data/
PATH <- scan(file = "~/B/data/data.csv", what = character())
## Opening the file (~/A/data/data.csv)
my_csv <- read.csv(PATH)
于 2018-02-21T00:07:45.120 回答