Подмножество списков R в соответствии со значением функции в geoR

Я изучаю поведение R и понял кое-что странное.

Я буду использовать пакет geoR в качестве эталона, так как именно с ним я работаю.

Кажется, я не понимаю, как работают списки подмножеств. У меня есть следующий код.

install.packages("geoR", dependencies = T)
library(geoR)

v.1 <- variog(wolfcamp)
v.2 <- variog(wolfcamp, trend = "1st")

vg <- list(v.1, v.2)
names(vg) <- c("Constant", "Linear")

В котором я создаю две вариограммы (природа этих функций значения не имеет). Это объекты класса "вариограмма", в чем можно быстро убедиться.

Внутри каждой вариограммы есть два вектора, «u» и «v», которые я хочу извлечь. Поскольку я помещаю их в список, я ожидаю, что смогу получить их с помощью простого подмножества.

>vg[1]$Constant$u
 [1]  16.77718  50.33154  83.88591 117.44027 150.99463 184.54899 218.10335
 [8] 251.65772 285.21208 318.76644 352.32080 385.87517 419.42953

>vg[1]$Constant$v
 [1]   1796.634   3690.930   7857.991  12440.353  23165.716  31798.304
 [7]  38956.743  52007.883  67601.931  94523.535 159900.019 186464.824
[13] 219033.678

Теперь, если я вызову тот же объект со средним подмножеством в кавычках, я получу тот же результат.

> vg[1]$"Constant"$u
 [1]  16.77718  50.33154  83.88591 117.44027 150.99463 184.54899 218.10335
 [8] 251.65772 285.21208 318.76644 352.32080 385.87517 419.42953

Но если я вызову подмножество на выходе функции или объекте, определенном как выход функции, результат будет другим.

k <- names(vg)[1]

> vg[1]$k$u
NULL

Почему это происходит? Связано ли это с мельчайшими подробностями определения вариограммы класса или есть что-то, чего я не понимаю в подмножестве списка? Спасибо


person Easymode44    schedule 26.11.2017    source источник
comment
Вам нужно [ вместо $ т.е. vg[1][[k]]$v Это более общее поведение, чем вариограмма класса   -  person akrun    schedule 26.11.2017
comment
Кстати, vg[1] не нужен, так как это может быть vg$Constant$u или vg[[k]]$u или vg[[1]]$u   -  person akrun    schedule 26.11.2017
comment
Лично я получаю vg[[k]]$u# [1] 16.77718 50.33154 83.88591 117.44027 150.99463 184.54899 218.10335 251.65772 285.21208 318.76644 352.32080 385.87517 419.42953   -  person akrun    schedule 26.11.2017
comment
Верно. Не удалось обновить страницу. Спасибо за ответ. Я накопаю свойства двойной скобки как можно скорее   -  person Easymode44    schedule 26.11.2017


Ответы (1)


Это не связано с «вариограммой» class, но является общим поведением для извлечения элементов list при передаче объектов. Структуру list можно найти с помощью str(vg).

Мы извлекаем один элемент list, используя [[. Это работает как для объектов, так и для имен элементов или индексов, т.е. если мы хотим извлечь с помощью объекта «k»

vg[[k]]$u
#[1]  16.77718  50.33154  83.88591 117.44027 150.99463 184.54899 218.10335 251.65772 285.21208 318.76644
#[11] 352.32080 385.87517 419.42953

Обратите внимание, что vg[1] не используется и не требуется, так как vg[1] по-прежнему не извлекает элемент «Константа».

vg[[1]]$u
#[1]  16.77718  50.33154  83.88591 117.44027 150.99463 184.54899 218.10335 251.65772 285.21208 318.76644
#[11] 352.32080 385.87517 419.42953

где 1 - первый элемент списка, т.е. "Константа"

Если мы используем сами имена

vg[['Constant']]$u
person akrun    schedule 27.11.2017