R:purrr:支付%。%er:walk是否通过了整个管道矢量,而不是元素?

时间:2019-02-10 02:47:05

标签: r iterator pipe tidyverse purrr

这里是获取文件名词干,从路径,词干和后缀组合文件名,读取文件,删除变量并再次保存文件的功能。在此简化版本中,读取主干和保存主干是相同的,而我只删除了一个变量。

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

从回溯中,我得知gzfilereadRDS调用。使用debug重新运行代码,我了解到gzfile的description参数是

chr{1:2]  "./CPS_1962-2018/df1.RDS"   "./CPS_1962-2018/df1.RDS"

就是长度为2的字符向量。

现在,我的代码似乎有个bug的特征,就是我无法解决自己不在我所认为的位置的问题。但是在我看来,步行是通过调用函数stems = c(“df1”, ”df2”)通过%>%接收到字符向量compact_cps作为其主要论点,然后将整个向量交给strip_cps一次处理一个元素。

似乎我比走那步更想念东西,但我看不见。

1 个答案:

答案 0 :(得分:1)

尝试

compact_cps <- function(stems, path){
  stems %>% 
    walk(strip_cps, path=path))
}


walk的第一个参数是向量茎,第二个参数是要为向量中的每个元素调用的函数的名称,然后是该函数的任何其他参数。