Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-调用导入文件夹时未找到文件,但作为单个文件打开并列出。文件显示全部?_R - Fatal编程技术网

R-调用导入文件夹时未找到文件,但作为单个文件打开并列出。文件显示全部?

R-调用导入文件夹时未找到文件,但作为单个文件打开并列出。文件显示全部?,r,R,我以前成功地使用过一些代码。它应该将给定目录中的所有文件导入到单个数据集中。我有一个新的数据文件夹,现在我无法让它工作。各个文件将被读入。List.files还将显示文件夹中的所有文件。所以我不知所措 list.files('../data/') [1] "B101-2.txt" "B101.txt" "B116.txt" "B6.txt" "B65.txt" "B67-2.txt" "B67.txt" [8] "B70.txt" "B71-2.txt" "

我以前成功地使用过一些代码。它应该将给定目录中的所有文件导入到单个数据集中。我有一个新的数据文件夹,现在我无法让它工作。各个文件将被读入。List.files还将显示文件夹中的所有文件。所以我不知所措

list.files('../data/')
[1] "B101-2.txt" "B101.txt"   "B116.txt"   "B6.txt"     "B65.txt"    "B67-2.txt"  "B67.txt"   
[8] "B70.txt"    "B71-2.txt"  "B71.txt"    "B95-2.txt"  "B95.txt"    "B96-2.txt"  "B96.txt"   
[15] "B98-2.txt"  "B98.txt"    "B99-2.txt"  "B99.txt"   

a = ldply(
.data = list.files(
    path = '../data/'
        )
, .fun = function(x){
    from_header = scan(x,n = 1,skip=1,quiet=T)
    to_return = read.table(
        file = x
        , skip = 20
        , sep = '\t'
        , fill = TRUE
            )
    to_return$condition = from_header[1]
    return(to_return)
        }
, .progress = 'text'
)
文件(文件“r”)中出错:无法打开连接 此外:警告信息: 在文件中(文件“r”): 无法打开文件“B101-2.txt”:没有此类文件或目录

list.files(“../data/”)
显示文件的输出,如
B101-2.txt
等,但是从调用
list.files()
可以看到相对路径是
。/data/
。因此,如果您尝试这样做,例如,
read.csv(file=“B101-2.txt”)
就会失败。相反,调用应该是
read.csv(file=“../data/B101-2.txt”)
。问题的解决方案是使用寻址文件所需的完整相对路径

将此用作
ldply()
的第一个参数:


关键是
list.files()
返回文件名列表(带扩展名),而不是这些文件的完整路径或相对路径。

可以直接在
list.files
中指定完整路径名

list.files(path = '../data', full.names = TRUE)
注意路径规范中省略了
/
。如果保留在中,文件将列为
.data//B101-2.txt
,这将失败

测试模拟您在中注意到的文件结构:

现在,我们从analysis文件夹中运行您的代码

setwd("analysis")
a = ldply(
.data = list.files(path = '../data', full.names = TRUE)
, .fun = function(x){
    from_header = scan(x,n = 1,skip=1,quiet=T)
    to_return = read.table(file = x, skip = 20, sep = '\t', fill = TRUE)
    to_return$condition = from_header[1]
    return(to_return)
        }
, .progress = 'text'
)
代码读入所有三个文件,并为每个文件输出第21-22行

a
  V1 V2 V3 condition
1  1  2  3         1
2  4  5  6         1
3  7  8  9         2
4 10 11 12         2
5 13 14 15         3
6 16 17 18         3

这并没有解决问题。该文件结构是一个包含分析和数据子文件夹的项目,这就是为什么“./data/”向上和向下进入数据文件夹的原因。我可以读取单个文件。读取整个文件夹的调用失败。一个接一个地读取它们会很痛苦。请给我一个文件的相对路径,您可以读取。
list.files(“../data/”)
[1]“B101.txt”。。。它可以工作` to_return=read.table(file='../data/B101.txt',skip=20,sep='\t',fill=TRUE)`这可以工作,但是当我尝试使用函数读取我得到的所有文件时:文件中出错(文件,“r”):无法打开连接另外:警告消息:文件中(文件“r”):无法打开文件“B101.txt”:没有此类文件或directory@OrianeLandry这将读取我的虚拟示例中所有必需的文件。您的工作目录是否如TimBiegeleisen的回答中所述设置为“测试/分析”,其中您的数据将位于“测试/数据”中?是的,工作目录为“测试/分析”。相同的错误消息。
setwd("analysis")
a = ldply(
.data = list.files(path = '../data', full.names = TRUE)
, .fun = function(x){
    from_header = scan(x,n = 1,skip=1,quiet=T)
    to_return = read.table(file = x, skip = 20, sep = '\t', fill = TRUE)
    to_return$condition = from_header[1]
    return(to_return)
        }
, .progress = 'text'
)
a
  V1 V2 V3 condition
1  1  2  3         1
2  4  5  6         1
3  7  8  9         2
4 10 11 12         2
5 13 14 15         3
6 16 17 18         3