Трудности с пониманием синтаксиса `[[a, b, c]]` (в igraph) - PullRequest
0 голосов
/ 17 июня 2020

Я новичок в R, и я только что наткнулся на этот пример:

library(igraph)
library(sand)
data(USairports)
USairports[["BOS", "JFK", edges = TRUE]]

Как работает [[]] в этом примере? Насколько я знаю, [[]] используется для доступа к одному элементу в списке, но почему мы можем передать ему 3 параметра? Похоже на матрицу / функцию. Спасибо.

1 Ответ

0 голосов
/ 17 июня 2020

Это очень хороший вопрос!

Вы действительно можете использовать больше индексов и аргументов.

Фреймы данных

Когда вы ссылаетесь на строки и столбцы фрейма данных двойные скобки отбросят возможные имена и позволят вам выбрать только один элемент.

Так, например, для фреймов данных вы можете использовать оба:

mtcars[2, 3]
mtcars[[2, 3]]

но:

# OK
mtcars[2:3, 3:4]
#               disp  hp
# Mazda RX4 Wag  160 110
# Datsun 710     108  93

# NOT WORKING
mtcars[[2:3, 3:4]]
# Error in col[[i, exact = exact]] : 
#   attempt to select more than one element in vectorIndex

Существуют дополнительные аргументы, которые можно передать в двойных квадратных скобках, см. документацию или введите ?"[[" в консоли R.

Списки

Для списков вы может использовать только один индекс для ссылки на элемент списка.

data <- as.list(mtcars)
data[[1]]
# or:
data[["mpg"]]
data$mpg

(См. документацию или введите ?"[[" в консоли R.)

igraph

Однако с USairports вы используете специальный класс igraph, который является типом списка и работает немного иначе (вы можете использовать больше индексов и, например, атрибут edges указан c для igraph).

Итак, ваш пример:

USairports[["BOS", "JFK", edges = TRUE]]

- это получить идентификаторы ребер между двумя вершинами ces (здесь от BOS до JFK).

См. igraph документацию .

...