R新的变量赋值

时间:2015-02-05 21:11:32

标签: 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]+"))
}

1 个答案:

答案 0 :(得分: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:“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)
}