2014-08-30 26 views
-1

我想這個循環:如何調用R中的「字符」對象的列表子集?

library(demography) 
fr.mort$rate$male 
fr.mort$rate$female 
fr.mort$rate$total 

爲了得到這樣的:

library(demography) 
for (i in c("male", "female", "total")) { 
    get(paste("fr.mort$rate$", i, sep = "")) 
} 

但doen't工作。我不明白爲什麼「get」在這種情況下不起作用:)

請幫助我!

+0

get「返回指定對象的值」,因此它在全局環境中查找名爲「fr.mort $ rate $ male」的對象,但找不到它們。你期望的結果是什麼,你爲什麼要嘗試這種方法?也許你正在尋找eval,解析方法? 'eval(parse(text ='fr.mort $ rate $ male'))' – rawr 2014-08-30 02:27:00

+0

你真的不應該使用'get()'。幾乎總是有一個更好的方法。 '對於(我在c(「男」,「女」,「總」)){fr [[「mort」]] [[「rate」]] [[i]]}'會做同樣的事情,儘管在這種情況下,「事物」就是無關緊要。 'get()'是爲了提取一個帶有字符向量的變量。在這個例子中'fr.mort'是變量。 「速度」不是變量,也不是「男性」,「女性」或「總數」。正如你試圖做的那樣,'get'不允許做索引。它只是一個字符 - >符號查找。預計只有'get(「fr.mort」)'會起作用。 – MrFlick 2014-08-30 03:24:15

+0

rawr,謝謝它的工作。 MrFlick,這就是我原來非簡化的例子所需要的,非常感謝! – 2014-08-31 05:27:52

回答

1

列表子集有更簡單,更安全的方法。嘗試使用[子集。 R的矢量化子集使得列表元素變得容易。這是一個嵌套列表示例,dat

> dat <- list(x = setNames(list(1,2,3,4,5), letters[1:5]) 
> dat$x[c("a", "c", "e")] 
# $a 
# [1] 1 
# 
# $c 
# [1] 3 
# 
# $e 
# [1] 5 

在你的代碼,這將是

> library(demography) 
> fr.mort$rate[c("male", "female", "total")] 

我肯定最有經驗的用戶[R會建議你這樣做來代替。

+0

謝謝!它在給定的例子中起作用。 – 2014-08-31 05:25:00