Как сделать бесконечно рекурсивный список в R: путать [и [[ -- r поле с участием list пол Связанный проблема

How to make an infinitely recursive list in R: confuse [ and [[


0
vote

проблема

русский

Редактировать: Этот вопрос глупо, я путающую [и [((спасибо @josilber), но я не могу удалить его.

Как можно сделать бесконечно рекурсивный список, l == l [1], в R?
Ужасный способ (для новичка R) это посмотреть на DataSet <код> fmri в пакете ASTSA :

 <код> data( fmri, package="astsa" )  # a list with fmri[1] == fmri[1][1] ... ??  print_recursive = function( x ){  # x x[1] x[1][1] ... while list     for( j in 1:5 ){         cat( class(x), len(x), names(x), " " )         str(x)         cat( " " )          x = x[1]  # <-- wrong, should be x[[1]]         if( class(x) != "list" )  break     }     x }  x = print_recursive( fmri )   
Английский оригинал

Edit: this question is silly, I confused [ and [[ (thanks @josilber), but I can't delete it.

How can one make an infinitely recursive list, L == L[1], in R ?
A terrible way (for an R novice) is to look at dataset fmri in package astsa:

data( fmri, package="astsa" )  # a list with fmri[1] == fmri[1][1] ... ??  print_recursive = function( x ){  # x x[1] x[1][1] ... while list     for( j in 1:5 ){         cat( class(x), len(x), names(x), " " )         str(x)         cat( " " )          x = x[1]  # <-- wrong, should be x[[1]]         if( class(x) != "list" )  break     }     x }  x = print_recursive( fmri ) 
</div
     

Список ответов

1
 
vote

Ответ на «Как можно сделать бесконечно рекурсивный список, l == l [1], в R" в том, что невозможно, потому что вам понадобится бесконечное количество памяти для хранения списка бесконечной рекурсивной глубины. ,

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

 <код> l <- list() depth <- 50 for (k in seq(depth-1)) {   l <- list(l) }   

Вы можете написать рекурсивную функцию для проверки глубины рекурсивного списка:

 <код> recursive.depth <- function(l) {   if (!is.list(l)) 0   else if (length(l) == 0) 1   else 1+max(sapply(l, recursive.depth)) } recursive.depth(l) # [1] 50 recursive.depth(fmri) # [1] 1   

Возвращаясь к примеру с вопроса, список, который вы имеете на самом деле не рекурсивят вообще (это просто список матриц). Причина, по которой вы считаете рекурсивным, это то, что индексирование <Код> l[1] подзревает список (aka it it rections rections список только с его первым элементом). Например, рассмотрим следующий очень простой список:

 <код> (l <- list(2)) # [[1]] # [1] 2   

Независимо от того, сколько раз я подмножею с <Код> [ Notiator, я вернусь тот же список:

 <код> l[1] # [[1]] # [1] 2 l[1][1] # [[1]] # [1] 2   

Запуск этого списка <код> l через ваш <код> print_recursive Функция также приведет к бесконечному циклам. Если вы хотели фактически извлечь первый элемент списка вместо того, чтобы поднимите саму список, вы должны использовать <код> [[ 1798877669 ).

 

The answer to "How can one make an infinitely recursive list, L == L[1], in R" is that it is impossible, because you would need an infinite amount of memory to store a list of infinite recursive depth.

That being said, you can build a recursive list of a specified depth with a simple for loop, at each iteration creating a new list that stores the old list as one of its elements:

l <- list() depth <- 50 for (k in seq(depth-1)) {   l <- list(l) } 

You could write a recursive function to check the depth of a recursive list:

recursive.depth <- function(l) {   if (!is.list(l)) 0   else if (length(l) == 0) 1   else 1+max(sapply(l, recursive.depth)) } recursive.depth(l) # [1] 50 recursive.depth(fmri) # [1] 1 

Getting back to the example from the question, the list you have is actually not recursive at all (it's just a list of matrices). The reason you think it is recursive is that indexing l[1] subsets the list (aka it returns the list with just its first element). For instance, consider the following very simple list:

(l <- list(2)) # [[1]] # [1] 2 

No matter how many times I subset with the [ notation, I will get back the exact same list:

l[1] # [[1]] # [1] 2 l[1][1] # [[1]] # [1] 2 

Running this list l through your print_recursive function will also result in an infinite loop. If you wanted to actually extract the first element of the list instead of subsetting the list itself, you should use the [[ notation (e.g. l[[1]]).

</div
 
 
   
   

Связанный проблема

1  Ошибка при использовании функции nnetar из пакета прогноза  ( Error when using nnetar function from forecast package ) 
У меня есть следующие данные: <код> kafka4 ................. Когда я выполняю функцию Nnetar, я получаю следующую ошибку: <код> kafka5 Я попробова...

1  Есть ли не-Java внедрение регрессионной модели M5P библиотеки RWEKA?  ( Is there a non java implementation of the m5p regression model of the rweka libr ) 
Я ищу функцию, которая создает модель регрессии M5P, как <код> M5P функция <код> RWeka библиотеки (как <код> M5P функция на основе кода Java, который имеет...

12  Частные члены в R Справочник класса R  ( Private members in r reference class ) 
Можно ли иметь частные поля элементов внутри класса R r. Играя с некоторыми из онлайн-примеров у меня есть: <код> > Account <- setRefClass( "ref_Account"...

0  R Язык: Как работать с динамически размером вектора?  ( R language how to work with dynamically sized vector ) 
Я изучаю программирование R, и пытаясь понять лучший подход к работе с вектором, когда вы не знаете, последний размер, он в конечном итоге будет. Например, в ...

0  Ошибка при использовании списков  ( Error when using lists ) 
У меня есть файл .rdata со списком внутри. Однако я получаю сообщение об ошибке при попытке отобразить список. <код> ls(data$Test$t0) Error in list2env(lis...

0  Извлечение данных из нижних слоев в растробрике  ( Extracting data from lower layers in a rasterbrick ) 
Итак, я извлекаю данные из растробрика, который я сделал, используя метод из этого вопроса: Как извлечь данные из растробрика? В дополнение к получению да...

5  Расчет дней в месяц между интервалом двух дат  ( Calculating days per month between interval of two dates ) 
У меня есть набор событий, которые каждый из которых имеет начало и окончание, но они проходят по объему ряда месяцев. Я хотел бы создать таблицу, которая пок...

8  Использование геоконининов в качестве координат вершин в Igraph R-пакет  ( Using geo coordinates as vertex coordinates in the igraph r package ) 
в пакете igraph для R, я борюсь, чтобы построить социальную сеть, используя координаты широты / долготы в качестве макета графика. Представьте себе этот про...

0  Коэффициент переменных членства в R  ( Coefficient variable membership in r ) 
Я разработал ужасно длительное решение для этого перед использованием регулярных выражений, но я надеюсь, что есть более родственный способ сделать это. Учи...

7  Ось X не соответствует барплоту  ( X axis does not match barplot ) 
Я использовал функцию barplot () для создания сложенного диаграммы из матрицы. Матрица выглядит так: <код> 1 0.989013 0.010987 2 0.999990 0.000010 3 0.999...

0  Трудно заполнить NAS с вмененными ценностями петлей, но не один за другим  ( Difficultly filling nas with imputed values by loop but not one by one ) 
Так что у меня есть матрица в R, это подмножество данных DataFrame, удерживающееся немного больше, чем идентификатор, группируя переменную и серии 1100 показа...

2  dlyryr "не обещание" ошибка  ( Dplyr not a promise error ) 
У меня есть набор набора панели, для которого я создал отсталые переменные с помощью функции LAG (). Когда я пытаюсь рассчитать дельта для каждого TimePoint, ...

2  Как изменить график разброса GGPlot2  ( How to modify ggplot2 scatter plot ) 
Вот мой набор данных: <код> df1 = data.frame(Count.amp = c(8,8,1,2,2,5,8), Count.amp.1 = c(4,4,2,3,2,5,4)) Я попробовал <код> library(ggplot2) qplot(C...

1  Как прочитать файлы суффикса .avl в r?  ( How to read avl suffix files into r ) 
Я загрузил глобальные водно-болотные угодья и озерные данные из этой ссылки: https://www.worldwildlife.org/pages/globalakes- и-водно-болотный угодья база дан...

6  403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания  ( 403 error when using rvest to log into website for scraping ) 
Я пытаюсь высказать страницу на веб-сайте, который требует входа в систему и в целом получение ошибки 403. Я изменил код из этих 2 сообщений для моего сайта...




© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.