如何使用lapply将文件加载到全局环境中?

时间:2018-03-23 23:56:24

标签: r lapply

我有以下工作代码:

############################################
###Read in all the wac gzip files###########
###Add some calculated fields ###########
############################################
library(readr)
setwd("N:/Dropbox/_BonesFirst/65_GIS_Raw/LODES/")
directory<-("N:/Dropbox/_BonesFirst/65_GIS_Raw/LODES/")
to.readin <- as.list(list.files(pattern="2002.csv"))

LEHD2002<-lapply(to.readin, function(x) {
  read.table(gzfile(x), header = TRUE, sep = ",", colClasses = "numeric", stringsAsFactors = FALSE)
})

但出于调试原因,我想将lapply中的内容加载到全局环境中。

This提供了一种方法。

# Load data sets
  lapply(filenames, load, .GlobalEnv)

但是当我尝试使用它时,我收到以下错误:

  

FUN中的错误(X [[i]],...):错误的恢复文件幻数(文件可能是   已损坏) - 未加载数据另外:警告消息:文件   'az_wac_S000_JT00_2004.csv.gz'有幻数&#39; w_geo&#39;使用保存   不推荐使用2之前的版本

我做错了什么,或者是'加载'&#39;已弃用等?

gzfile(x)将.gz(压缩)文件转换为.csv,这样就不会出现问题......

2 个答案:

答案 0 :(得分:2)

load以二进制格式加载文件(例如.rda个文件)。您以文本格式.csv文件加载文件。这就是您使用read.table的原因。当您尝试使用load阅读文本格式文件时,您将收到该错误。

用法:lapply(filenames, load, .GlobalEnv),将.GlobalEnv传递给load,而不是lapply。这只是一种不同的读取文件列表的方式,这些文件格式与您的格式不同。 load可以将对象放在不同的环境中,以防止您覆盖当前环境中与您正在加载的对象同名的对象。使用save创建的二进制对象(您可以使用load加载)随身携带它们的名称。加载它们时,不要将它们分配给名称。它们可以在您选择用其原始名称加载到的环境中访问。

两种方法都将对象加载到.GlobalEnv。所以你的代码按照你想要的方式工作。您可以通过在运行代码后尝试访问它们来判断您的对象是否以某种方式被读入不同的环境。如果您可以使用

命名的对象访问它们

答案 1 :(得分:0)

快速而肮脏的方法是使用<<-而不是<-

将其加载到全局环境中
LEHD2002<<-lapply(to.readin, function(x)
LEHD2002<-lapply(to.readin, function(x)

attach()也可以使用;但更加敏感,附加多个文件会造成混乱。 (即,确保将attach()的所有文件都分离()。