我已将名称列表存储为字符,并希望将它们转换为可以作为数据框名称接受的内容。像这样的东西:
for (i in 1:18) {
str[i] <- paste("alert_month_amount_",i,sep="")
}
name_str = as.character(str)
然后name_str将是:
name_str[1]
将为"alert_month_amount_1"
现在我想将某些数据分配给在循环中使用name_str [i]的数据框,如:
for (n in 1:18){
name_str[n] <- subset(by_Month_Acct_Num,month==month_index[n] & year==year_index[n])
}
但这可能不起作用,因为名称作为双引号内的字符传递(&#34;)。我很感激你的帮助。
答案 0 :(得分:1)
您可以使用assign
:
assign(name_str[n], subset(by_Month_Acct_Num,month==month_index[n] & year==year_index[n]))
答案 1 :(得分:1)
这是FAQ 7.21。该答案中最重要的部分是它所说的最终(如@MrFlick)最好使用列表。你真的应该学习如何利用R的矢量化函数。
paste
和paste0
函数都是矢量化的,因此您的第一段代码可以替换为:
name_str <- paste0("alert_month_amount_", 1:18)
无需循环。
您可以创建列表并使用以下代码填充:
alert_month_amount <- list()
for(i in 1:18) {
alert_month_amount[[i]] <- subset(by_Month_Acct_Num,month==month_index[n] & year==year_index[n])
}
使用split
功能可能更容易。您还可以使用lapply
或mapply
。
如果你想要名字的元素,那就做:
names(alert_month_amount) <- name_str
现在,将所有内容都放在一个列表中,您可以复制,保存,删除等一个对象,而不需要另外一个循环来完成每个单独的部分。如果你想对创建的每件作品做同样的事情(计算摘要,拟合回归等),那么列表中的所有内容都可以在列表中使用lapply
或sapply
而不是必须创建另一个循环并弄清楚如何抓取循环中的每个部分并将其保存到输出对象。