什么是函数(arg)[Arg]

时间:2015-10-14 12:44:36

标签: r

当我练习状态数据集时,

我看到这种方式来显示水平:

myState <-as.data.frame(cbind(state.x77,region=state.region))
myState <- cbind(myState,regionName=levels(state.region)[state.region])

因此实际的regionname将被绑定,但在这里我不知道如何解释这里的levels(state.region)[state.region]。 我不知道为什么levels(state.region)[state.region]会在这里返回长度为50的字符(向量?)。

最初我认为它可以通过循环完成,抛出索引,然后返回正确的regionname。但突然之间,抛出变量名称就会完美地完成它,所以我只是想知道里面发生了什么。

我知道levels(state.region)[3]会显示state.region因素中的第三个等级,这有助于解释数字何时被因素本身取代?

我还试图搜索之前是否询问过但是看不到类似的东西,或者我没有得到正确的关键字。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

让我们通过检查事情得到这个:

第一个state.region是一个因素,让我们看看它:

> dput(state.region)
structure(c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, 3L, 
3L, 3L, 3L, 2L, 2L, 1L, 2L, 1L, 3L, 3L, 2L, 3L, 4L, 3L, 4L, 1L, 
1L, 4L, 1L, 2L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 3L, 2L, 2L, 4L, 1L, 
2L, 4L, 2L, 3L, 4L), .Label = c("Northeast", "South", "North Central", 
"West"), class = "factor")

调用levels为我们提供了因子标签的字符向量:

> dput(levels(state.region))
c("Northeast", "South", "North Central", "West")

有趣的是当你将因子作为这个角色向量的选择器时,最简单的可视化方法是在因子上调用as.integer:

> dput(as.integer(state.region))
c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, 3L, 3L, 3L, 
3L, 2L, 2L, 1L, 2L, 1L, 3L, 3L, 2L, 3L, 4L, 3L, 4L, 1L, 1L, 4L, 
1L, 2L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 3L, 2L, 2L, 4L, 1L, 2L, 4L, 
2L, 3L, 4L)

基本上这些复合命令最终要做的是:

 > c("Northeast", "South", "North Central", "West")[c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, 3L, 3L, 3L, 
3L, 2L, 2L, 1L, 2L, 1L, 3L, 3L, 2L, 3L, 4L, 3L, 4L, 1L, 1L, 4L, 
1L, 2L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 3L, 2L, 2L, 4L, 1L, 2L, 4L, 
2L, 3L, 4L)]

获取字符向量的更简单的语法是使用as.vector(state.region)