2014-08-30 50 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