【问题标题】:R for() loop: Pipe 'ls' stdout into read.csv() and create multiple objectsR for() 循环:将“ls”标准输出通过管道传输到 read.csv() 并创建多个对象
【发布时间】:2021-06-08 09:59:27
【问题描述】:

我想实现一个优雅的解决方案:通过将system("ls") 标准输出代理到read.csv() 来创建对象,使用for()

工作目录:

[Data]    #contain 10 .csv files e.g: './Data/dataset01.csv'
                                              ^-------^(8~16th characters)
my_Script.Rmd   #RMarkdown script used in the example

R 代码:

for (i in system("ls ./Data/*.csv"))
     
     { read.csv(file=i) -> strsplit(i, 8, 16) }

我打算在这里实现的目标:

  1. 对于来自ls 的每个文件路径标准输出。
  2. 读取 .csv 文件并
  3. 为每个读取的数据集创建一个数据框。

谢谢!

【问题讨论】:

    标签: r loops csv for-loop


    【解决方案1】:

    首先获取文件名。 您可以按照system 的建议执行此操作,但请确保包含intern=T 以将命令的输出捕获为字符串。

    fl <-system("ls ./MATLAB/*.m", intern = T)
    

    另一种选择是使用函数list.files

    fl <- list.files(path = "Data", pattern = "\\.csv$", full.names = T)
    

    然后使用assign 为名称赋值。使用basename(删除路径)和tools::file_path_sans_ext(删除文件扩展名)的组合。

    for (i in fl){
      assign(tools::file_path_sans_ext(basename(i)), read.csv(i))
    }
    

    【讨论】:

    • 简洁优雅的概念,最重要的是,像魅力一样工作!谢谢!
    • 很高兴我能帮上忙。请接受答案作为解决方案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多