我做了一个循环,将函数的结果赋给新创建的变量。之后,该变量用于创建另一个变量。 第二步未能产生预期的结果。
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 :(得分: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_1
,data_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)
}