如何创建以函数参数命名的对象并将其全部rbind?

如何创建以函数参数命名的对象并将其全部rbind?,r,function,rbind,R,Function,Rbind,我的目标是自动化一些来自巴西家庭调查的数据实现和分析。为此,第一步是创建一个函数,用于下载和绑定多个版本的家庭调查。 好的一点是,我已经有了一个功能,可以下载不同版本的家庭调查。它被称为“PNADcIBGE::get_pnadc”。此函数以参数形式获取年份和季度。因此,要做到这一点还有很长的路要走: install.package("PNADcIBGE") library(PNADcIBGE) pnad_2012_1 <- get_pnadc(year = 2012,

我的目标是自动化一些来自巴西家庭调查的数据实现和分析。为此,第一步是创建一个函数,用于下载和绑定多个版本的家庭调查。 好的一点是,我已经有了一个功能,可以下载不同版本的家庭调查。它被称为“PNADcIBGE::get_pnadc”。此函数以参数形式获取年份和季度。因此,要做到这一点还有很长的路要走:

install.package("PNADcIBGE")
library(PNADcIBGE)
pnad_2012_1 <- get_pnadc(year = 2012, quarter = 1)
pnad_2012_2 <- get_pnadc(year = 2012, quarter = 2)
pnad_2012_3 <- get_pnadc(year = 2012, quarter = 3)
pnad_2012_4 <- get_pnadc(year = 2012, quarter = 4)
pnad_2013_1 <- get_pnadc(year = 2012, quarter = 1)
我不知道如何在R中执行此操作,我尝试:

PCC <- function(a, t) {
 for (i  in 2012:a-1){
  for(j in 1:4){
    Pnadc_i_j <- get_pnadc(year = i , quarter = j)
    }
  }
  for(k in 1:t){
    Pnadc_a_k <- get_pnadc(year = a, quarter = k)
  }
}

PCC(2020, 1)
我以为我已经将初始值设置为2012年,但显然我没有

我是R新手,但我可以通过以下方式在SAS中实现同样的目标:

%macro PCC(a, t);
%do i=2012 %to %eval(&a.-1);
%do j=1 %to 4;
proc import datafile="H:\IBGE\pnadc_&i._&j..csv"
        out=pnadc_&i._&j.
        dbms=csv
        replace;
%end;
%end;

%do k=1 %to &t.;
proc import datafile="H:\IBGE\pnadc_&a._&k..csv"
        out=pnadc_&a._&k.
        dbms=csv
        replace;
%end;
%mend;
%PCC(2020, 1);

/*And finally, the row-bind is super easy*/

data pnad_final;
set pnadc_20:;
run;

关于如何在R中得到类似的东西有什么想法吗?

问题在于运算符优先级。你在2012年的《i:a-1》中遗漏了一些括号。而应该是2012年的i:a-1。您编写它的方式创建了从2012到a的向量,然后从每个元素中减去1,因为:运算符的优先级高于-。这使得i be 2011的第一个值出现了错误

例如:

a <- 2020

2012:a-1
# [1] 2011 2012 2013 2014 2015 2016 2017 2018 2019

2012:(a-1)
# [1] 2012 2013 2014 2015 2016 2017 2018 2019

您可以使用expand.grid创建所有数据组合,并使用lappy将get_pnadc函数应用于每个组合

library(PNADcIBGE)
data <- expand.grid(year = 2012:2019, quarter = 1:4)

all_data <- lapply(seq(nrow(data)), function(i) 
                   get_pnadc(year = data$year[i], y = data$quarter[i]))

pnad_2012_1是一个包含大量信息的类列表。你想从中提取一种元素,然后再从中提取出来吗?嘿,Ronak Shah,谢谢你的评论。根据我仅有的葡萄牙语教程pnad_2012_1应为survey.design对象。是的,有很多信息。我可能只会进一步选择其中的一些列。但你是对的。我预计它们应该有大约300k行和大约100列。我只能选择它的几个变量使它变小:Pnadc_2012_1非常感谢!!!在这个问题上你肯定是对的!显然,它正在工作!它仍在运行,预计需要一段时间,因为它们是几个大型数据集。我会等的。你对问题的第二部分有什么想法吗?关于如何在不列出所有对象的情况下查找所有结果对象?非常感谢您分享代码和知识!我承认我仍在计算expand.grid和apply。但我有了一个大致的想法,而且似乎确实奏效了。但我还是没能得到最后的结果。可能数据集太大了,无法用一个循环完成所有工作。不过我有16GB,我可以在WPS/SAS中实现。它运行了几个小时,在某个时候,我收到一条错误消息,说我正在复制和解压缩文件的文件夹不再存在。也许是我把线圈弄错了。我会继续努力想办法的。再次感谢你。一旦我能得到一个结果,我会把它张贴在这里。不幸的是,还没有。
a <- 2020

2012:a-1
# [1] 2011 2012 2013 2014 2015 2016 2017 2018 2019

2012:(a-1)
# [1] 2012 2013 2014 2015 2016 2017 2018 2019
library(PNADcIBGE)
data <- expand.grid(year = 2012:2019, quarter = 1:4)

all_data <- lapply(seq(nrow(data)), function(i) 
                   get_pnadc(year = data$year[i], y = data$quarter[i]))
new_data <- do.call(rbind, lapply(all_data, `[[`, 'variables'))