В R, как я могу построить список с некоторыми элементами, ссылающимися на более ранние элементы в списке? - PullRequest
6 голосов
/ 09 января 2020

Я пытаюсь сделать что-то вроде этого:

opts = list(
  width=128,
  overlap=width/2,
)

Но, как и ожидалось, я получаю

Error: object 'width' not found

Что такое хорошая идиома для спасения этого фрагмента кода?

Ответы [ 3 ]

7 голосов
/ 09 января 2020

Вы можете использовать dplyr::lst, что аналогично list, но здесь вы можете создавать компоненты последовательно.

dplyr::lst(
  width = 128, 
  overlap=width/2,
)

#$width
#[1] 128

#$overlap
#[1] 64
4 голосов
/ 09 января 2020

Другой вариант:

opts = list(
  width={width<-128},
  overlap=width/2
)
1 голос
/ 09 января 2020

Используя base R, лучшее, что вы могли бы сделать, - это сначала определить список с элементом width, а затем повторно использовать его в более позднем назначении:

lst <- list(width=128)
lst$height <- lst$width / 2
lst

$width
[1] 128

$height
[1] 64
...