【问题标题】:How to create MacOS/Linux link for reading data file?如何创建用于读取数据文件的 MacOS/Linux 链接?
【发布时间】:2014-11-16 17:26:40
【问题描述】:

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

我最初是通过以下方式创建别名(在 MacOS 中) 右键单击查找器中的文件~/A/data.csv,然后单击“制作别名”。然后将别名复制到~/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    

【问题讨论】:

  • 整个错误信息是什么?请将其添加到您的帖子中。您是否尝试在文件名的开头添加~,即"~/B/data/data.csv"
  • 我现在添加了整个错误消息。我试图避免使用~,因为我想使用相对路径(相对于项目)。但是,我确实按照您的建议尝试使用~。但它没有用。
  • 请显示您用于创建符号链接的命令。
  • 我尝试了两种方法,1.右键单击finder中的文件~/A/data.csv,然后单击“制作别名”。然后将别名复制到~/B/并重命名为~/B/data.csv 2.ln -s ~/A/data.csv ~/B
  • 严格来说,这是一个 Linux/MacOS 问题,与 R 无关。它也可能是重复的,应该作为重复关闭。

标签: r linux macos ln


【解决方案1】:

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

  • 请注意,对于小文件(例如 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2010-09-13
    • 2011-09-29
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多