【发布时间】:2017-03-31 02:58:01
【问题描述】:
如何正确构建一个 lapply 来读取(从一个目录中)所有 .csv 文件,将所有列作为字符串加载,然后将它们绑定到一个数据框中。
根据this,我有办法将所有 .csv 文件加载并绑定到数据框中。不幸的是,他们对列的类型转换方式的可变性感到困惑。因此给了我这个错误:
错误:无法自动将字符转换为整数 专栏
我尝试用arguments for data type 来补充代码,并试图将所有内容都保留为字符;我现在被困在能够正确地让我的 lapply“循环”有效地引用其“循环”的每个循环的主题上。
srvy1 <- structure(list(RESPONSE_ID = 584580L, QUESTION_ID = 328L, SURVEY_ID = 2324L,
AFF_ID_INV_RESP = 5L), .Names = c("RESPONSE_ID", "QUESTION_ID",
"SURVEY_ID", "AFF_ID_INV_RESP"), class = "data.frame", row.names = c(NA,
-1L))
srvy2 <- structure(list(RESPONSE_ID = 584580L, QUESTION_ID = 328L, SURVEY_ID = 2324L,
AFF_ID_INV_RESP = "bovine"), .Names = c("RESPONSE_ID", "QUESTION_ID",
"SURVEY_ID", "AFF_ID_INV_RESP"), class = "data.frame", row.names = c(NA,
-1L))
files = list.files(pattern="*.csv")
tbl = lapply(files, read_csv(files, col_types = cols(.default = col_character()))) %>% bind_rows
我可以在 tidyverse 中保留一个简单的解决方法吗,或者我必须降低一个级别并自己公开构建 for 循环 - 每个 this。
【问题讨论】:
-
反对票到底是为了什么?
-
很可能是因为没有提供可重现的示例,包括数据。您的代码中有一些错误。应该是
lapply(fies, read_csv, col_types = cols(.default = col_character())) -
我将提供两个文件中的
head(x,5),从这些文件中创建一个列表,然后将结果dput粘贴到此处。 -
tbl = lapply(files, read_csv(col_types = cols(.default = col_character())))得到以下错误 Error in inherits(x, "connection") : 参数“file”丢失,没有默认值 而这个tbl = lapply(files, read_csv(files, col_types = cols(.default = col_character())))得到这个开关错误(tools::file_ext(path), gz = gzfile(path, ""), bz2 = bzfile(path, : EXPR 必须是长度为 1 的向量另外:警告消息:1:在 if ( grepl("\n", x)) { : 条件长度 > 1 并且只使用第一个元素 这通常意味着我需要按行调用。 -
lapply应该是lapply(x, FUN, ...)的形式,其中 ... 是传递给 FUN 的参数。您正在填充 FUN 中的参数。应该是lapply(files, read_csv, col_types = cols(.default = col_character()))