粘贴的变量名称在循环中无法识别

时间:2012-11-22 16:55:35

标签: r loops paste

对于丑陋的代码感到抱歉,但我不确定到底出了什么问题

for (i in 1:1) 
    tab_sector[1:48,i] <- 
        tapply(get(paste("employee",1997-1+i, "[birth<=(1997-1+i)]",sep="")),
               ordered(sic2digit[birth<=(1997-1+i)],levels=tab_sector_list))

# Error in get(paste("employee", 1997 - 1 + i, 
# "[birth<=(1997-1+i))]",  : object 'employee97[birth<=(1997-1+i)]' not found

但变量在那里:

head(employee97[birth<=(1997-1+i)])
# [1] 1 2 2 1 3 4

一个更简单的版本,其中“员工”不受“出生”作品的限制

2 个答案:

答案 0 :(得分:2)

您不能get索引元素,例如get("x[i]")失败:您需要get("x")[i]

你的代码也太乱了,看看发生了什么,但这是尝试翻译:

   for (i in 1:1){
        ind <- 1997-1+i
        v1 <- get(paste0("employee",ind))
        tab_sector[1:48,i] <- tapply(v1[birth<=ind],
             ordered(sic2digit[birth<=ind],levels=tab_sector_list))
    }

答案 1 :(得分:2)

如果你告诉我们你想要完成的事情会有所帮助。

在您的代码中,get函数正在查找名称为“'employee97 [birth&lt; =(1997-1 + i)]”的变量,可以使用的代码是查找名称为“的变量” employee1997“然后对它进行子集化,那些是非常不同的。 get函数不进行子集化。

您要做的部分工作是FAQ 7.21,其中最重要的部分是建议将数据存储在列表中以便于访问的结束。