2015-02-05 66 views
0

我做了一个循环,将函数的结果赋值给新创建的变量。之后,该变量用于创建另一个。 这第二步不能产生预期的结果。R新变量赋值

library(stringr) 
for (i in 1:length(Ids)){ 
    nam <- paste("data", Ids[i], sep = "_") 
    assign(nam, GetReportData(query, token,paginate_query = F)) 
    newvar=paste(nam,"contentid",sep="$") 
    originStr=paste(nam,"pagePath",sep="$") 
    assign(newvar,str_extract(originStr,"&id=[0-9]+")) 
} 
+0

你究竟在做什么?使用'assign()'通常是没有必要的。将相关值存储在列表中而非环境中的单独变量几乎总是更好。另外,您不能使用帮助页面中描述的名称具有“$”的分配:“分配不分配分配方法,因此不能用于设置向量,名称,属性等的元素”。 – MrFlick 2015-02-05 21:13:43

回答

3

不要创建一堆变量,将相关值存储在命名列表中,以便于检索它们。你没有提供任何输入来测试,但我猜这是做同样的事情。

library(stringr) 
mydata <- lapply(1:length(Ids), function(i) { 
    dd <- GetReportData(query, token,paginate_query = F)) 
    dd$contentid <- str_extract(d$pagePath,"&id=[0-9]+")) 
    dd 
}) 

这将返回一个data.frames列表。你可以用mydata[[1]]mydata[[2]],访问它们等,而不是data_1data_2

如果你绝对坚持打造一组变量,只要确保做一个实际的对象上所有的转换,然后保存该对象当你完成了。如帮助页面中所述,您永远不能使用具有$[的名称进行分配:“assign不分配分配方法,因此不能用于设置向量,名称,属性等元素。”例如

for(i in 1:length(Ids)) { 
    dd <- GetReportData(query, token,paginate_query = F)) 
    dd$contentid <- str_extract(d$pagePath,"&id=[0-9]+")) 
    assign(paste("data",i,sep="_"), dd) 
}