2012-11-22 24 views
0

遺憾的醜陋的代碼,但我不知道到底發生了什麼錯誤粘貼變量名在循環不承認

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

可能不算什麼,但不應粘貼(「員工」,1997-1 + i,「[birth <=(1997-1 + i)]」,sep =「」)'給你'employee1997 [出生<=(1997-1 + i)]'而不是'employee97 [...'?代碼片段或由R報告的錯誤不匹配! – mjv

+0

對不起,我的錯誤是,爲了使它更簡單,我修改了較早的(甚至更醜陋的)索引:「僱員」(1997-1901 + i) - 爲進一步添加混淆層而做出的歉意 –

回答

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)) 
    } 
+0

get(「x」 )[我]確實是我需要的提示 - 感謝您對亂碼的道歉 –

2

,如果你告訴我們你想實現什麼這將有助於。

在代碼中get功能正在尋找其名稱的變量是「'employee97 [出生< =(1997-1 + 1)]」,即工作是找到一個變量,其名稱爲‘employee1997’,那麼代碼子集化,這些是非常不同的。 get函數不會進行子集化。

你試圖做的一部分是常見問題7.21,其中最重要的部分是它建議將數據存儲在列表中以便於訪問的最終部分。