【问题标题】:Using unz() to read in SAS data set into R使用 unz() 将 SAS 数据集读入 R
【发布时间】:2020-12-08 01:23:46
【问题描述】:

我正在尝试使用 R 中的 unz() 函数从 SAS 读取数据集。我不想解压缩文件。我已成功使用以下内容阅读其中之一:

dir <- "C:/Users/michael/data/"
setwd(dir)
dir_files <- as.character(unzip("example_data.zip", list = TRUE)$Name)
ds <- read_sas(unz("example_data.zip", dir_files))

效果很好。我能够读取数据集并进行分析。但是,当我尝试读取另一个数据集时,我遇到了错误:

dir2_files <- as.character(unzip("data.zip", list = TRUE)$Name)
ds2 <- read_sas(unz("data.zip", dir2_files))
Error in read_connection_(con, tempfile()) : 
  Evaluation error: error reading from the connection.

我在这里阅读了其他问题,说文件路径可能指定不正确。一些答案提到将 list.files() 提交到控制台以查看列出的内容。

list.files()
[1] "example_data.zip"              "data.zip"

如您所见,我可以看到文件夹,并且我成功地能够从“example_data.zip”中读取数据集,但我无法访问 data.zip 文件夹。

我错过了什么?提前致谢。

【问题讨论】:

  • 很确定haven 会自动解压缩文件。您是否尝试过提供 zip 文件的路径? (假设它不是一个包含多个文件的 zip)。 data.zip 也可能包含多个文件。在这种情况下,您需要使用lapply() 或类似的方式阅读它们。
  • 谢谢,@Andrew——不知道haven。目录中的文件夹每个文件夹仅包含一个文件。我尝试提供 zip 文件夹的完整路径,但它仍然给了我同样的错误。我试过其他包,比如read.sas7bdat,但我遇到了同样的问题。我只是不明白为什么它适用于一个文件而不适用于另一个文件。我会继续寻找解决方案。
  • 嗯,如果您遇到相同的错误,可能是您仍在连接中阅读。也许尝试只做read_sas("C:/Users/michael/data/example_data.zip")read_sas("C:/Users/michael/data/data.zip")(tidyverse 阅读功能也接受连接)。如果这不起作用,您也可以从 R 中解压缩文件 - 然后读入数据集。

标签: r r-haven


【解决方案1】:

您的“dir2_files”是“data.zip”中不同文件名称的字符串向量。因此,例如,如果您要读取的文件的名称位于“dir_files”中的“k”位置和“dir2_files”中的“j”位置,那么让我们像这样更新您的脚本:

 dir <- "C:/Users/michael/data/"
  setwd(dir)
 dir_files <- as.character(unzip("example_data.zip", list = TRUE)$Name)
ds <- read_sas(unz("example_data.zip", dir_files[k]))





 dir2_files <- as.character(unzip("data.zip", list = TRUE)$Name)
 ds2 <- read_sas(unz("data.zip", dir2_files[j]))

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2020-12-16
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多