这里有一个函数,可以获取文件名stem,从path、stem和suffix组合文件名,读取文件,删除变量,然后再次保存文件。在这个简化的版本中,read-stem和save-stem是相同的,我只删除了一个变量。
library(tidyverse)
strip_cps <- function(X, path = path){
readRDS(paste0(path = path, X, ".RDS")) %>%
select(-"YEAR") %>%
saveRDS(file = paste0(path = path, X, ".RDS"))
}
这里有一个函数,可以重复调用前一个函数,每个函数干一次。
compact_cps <- function(stems, path){
stems %>%
walk(strip_cps0(., path=path))
}
这是我的数据的微观版本。用您自己系统上的目录替换数据目录
df1 <- tibble(YEAR = 1, SEX = 1)
df2 = df1[1,] + c(1, 1)
saveRDS(df1, file = paste0("./CPS_1962-2018/", "df1", ".RDS"))
saveRDS(df2, file = paste0("./CPS_1962-2018/", "df2", ".RDS"))
在该数据上运行上述代码会导致以下错误:
Error in gzfile(file, "rb") : invalid 'description' argument
从回溯中,我了解到
gzfile
被称为
readRDS
. 用重新运行代码
debug
,我了解到gzfile的描述参数是
chr{1:2] "./CPS_1962-2018/df1.RDS" "./CPS_1962-2018/df1.RDS"
也就是说,一个长度为2的字符向量。
现在,在我的代码中,似乎有一个缺陷的特征,那就是我不能自己解决它们不在我认为的位置。但在我看来,在接收到字符向量之后,walk
stems = c(âdf1â, âdf2â)
作为其主要论点,通过
%>%
从调用函数
compact_cps
,然后将整个向量交给
strip_cps
而不是一次只处理一个元素。
似乎我错过了什么比走路更容易,但我看不见什么。