【问题标题】:Read many .sas7bdat files via a loop in R通过 R 中的循环读取许多 .sas7bdat 文件
【发布时间】:2021-04-21 22:58:00
【问题描述】:

我是 R 的菜鸟,在以下方面遇到了很多麻烦: 我必须读取 200 多个数据集,并且我想自动执行此操作。我编写了一些非常适合 Rdata 扩展的代码,但如果我尝试将它用于 SAS 文件,它总是会阻塞......

path="路"

# I make a list of all the different paths of all the files in my folder

File_pathnames <- list.files (path= Road, pattern = "*.sas7bdat", full.names=T)

# I create an empty list

list.data<-list()


# I try to run a loop to load all the SAS files:

for (i in 1: length(File_pathnames))
{
 list.data[[i]] <- read_sas(File_pathnames[i])
}

问题:它不会将表加载到我的全局环境中(当我使用 rdata 文件时,我使用了加载功能并且所有数据都出现在全局环境中)。我该如何解决这个问题?

非常感谢!

【问题讨论】:

    标签: r loops load


    【解决方案1】:

    实际上,您的数据在全球环境中,作为list.data 的元素(检查list.data[[1]]list.data[[2]],...)

    您遇到的问题与load 使用保存时的名称在环境中加载对象有关。举个例子

    x <- 10
    save(x, file='tmp')
    rm(x)
    x
    load('tmp')
    x
    

    保存x 并重新加载它,而read_sas 只加载您必须分配给变量的数据。

    如果您想专门分配每个数据集,您必须为每个数据集定义一个名称并分配数据。你的循环看起来像

    for (i in 1: 1: length(File_pathnames))
    {
      namei <- paste0("name",i)
      data <- read_sas(File_pathnames[i])
      assign(namei, data)
    }
    

    您的数据将存储在“name1”、“name2”、...

    【讨论】:

      【解决方案2】:

      您应该将在 File_pathnames[i] 中读取的每个 SAS 文件分配为名为 FilenamesS[i] 的对象。试试

      for (i in 1: length(File_pathnames))
      {
       data <- read_sas(File_pathnames[i])
       assign (FilenamesS[i], data)
       }
      

      【讨论】:

        猜你喜欢
        • 2011-08-11
        • 1970-01-01
        • 2021-02-10
        • 2021-06-24
        • 1970-01-01
        • 2021-11-27
        • 2020-04-17
        • 2014-02-05
        • 1970-01-01
        相关资源
        最近更新 更多