R括号的奇怪行为

时间:2013-05-24 02:38:51

标签: r

所以我一直试图在过去一小时左右得到一个字符向量的子集。在我的(挣扎)尝试使这个工作我遇到了一个有趣的R特征。我有数据(在JSON解析后)的形式

[[1]]
[[1]]$business_id
[1] "rncjoVoEFUJGCUoC1JgnUA"

[[1]]$full_address
[1] "8466 W Peoria Ave\nSte 6\nPeoria, AZ 85345"

[[1]]$open
[1] TRUE

[[1]]$categories
[1] "Accountants"           "Professional Services" "Tax Services"         
[4] "Financial Services"   

[[1]]$city
[1] "Peoria"

[[1]]$review_count
[1] 3

[[1]]$name
[1] "Peoria Income Tax Service"

[[1]]$neighborhoods
list()

[[1]]$longitude
[1] -112.2416

[[1]]$state
[1] "AZ"

[[1]]$stars
[1] 5

[[1]]$latitude
[1] 33.58187

[[1]]$type
[1] "business"

这是我正在使用的代码

#!/usr/bin/Rscript

require(graphics)
require(RJSONIO)

parsed_data <- lapply(readLines("yelp_phoenix_academic_dataset/yelp_academic_dataset_business.json"), fromJSON)

#parsed_data[,c("categories")]
print(parsed_data[1])

当我试图放弃除了类别列之外的所有内容时,我遇到了这个有趣的行为

print(parsed_data[1])
print(parsed_data[1][1])
print(parsed_data[1][1][1][1][1][1])

所有产生相同的输出(上面公布的输出)。那是为什么?

2 个答案:

答案 0 :(得分:4)

这是[[[之间的差异。很难在网上搜索这些内容,但?'['会提供帮助。

使用[索引列表时,会返回一个列表:

list(a=1:10, b=11:20)[1]
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10

这是一个元素的列表,因此重复操作会产生相同的值:

list(a=1:10, b=11:20)[1][1]
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10

[[返回元素,而不是包含元素的列表。它也只接受一个索引(而[接受一个向量):

list(a=1:10, b=11:20)[[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10

此操作在列表中不是幂等的:

list(a=1:10, b=11:20)[[1]][[1]]
## [1] 1

答案 1 :(得分:2)

您的JSON数据当前存储在列表中,而不是矢量中,因此索引编号不同。

正如Matthew所指出的,使用[]访问元素和使用[[]]之间存在差异。有关此问题的讨论,我将向您推荐此堆栈溢出线程:

In R, what is the difference between the [] and [[]] notations for accessing the elements of a list?

查看打印出的数据,您的数据将存储为嵌套列表:

parsed_data[[1]]

将为您提供包含每个列的列表。要访问类别列,您可以使用以下任何一项:

parsed_data[[1]][["categories"]]
parsed_data[[1]][[4]]
parsed_data[[1]]$categories

这将为您提供一个您期望的名称向量:

## [1] "Accountants"           "Professional Services" "Tax Services"
## [4] "Financial Services"  

请注意,按索引(命名或数字)访问时,仍然必须使用双括号表示法:[[]]。如果你改用[],它会给你一个列表而不是一个向量:

parsed_data[[1]]["categories"]
## [[1]]
##   [1] "Accountants"           "Professional Services" "Tax Services"
##   [4] "Financial Services"