Как получить список списков в R с моими данными - PullRequest
0 голосов
/ 12 сентября 2011

вот функция, которая работает нормально, но дает вывод в выводе, который я не хочу.

frequencies <- {}

for (k in (1:4))
{   
    interval <- (t(max_period_set[k]))

    intervals <- round(quantile(interval,c(0,0.05,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,0.95,1.0)))
    frequency <- {}
    for (i in (2:length(intervals)))
    {       
        count = 0;      
        for (r in (1:length(interval)))
        {
            if (r == length(interval))
            {
                if (interval[r] >= intervals[i-1] && interval[r] <= intervals[i])
                {
                    count = count + 1
                }
            }
            else
            { 
                if (interval[r] >= intervals[i-1] && interval[r] < intervals[i])
                {
                    count = count + 1
                }
            }
        }   
        frequency <- c(frequency,count)
    }
    frequencies[[length(frequencies)+1]] <- frequency
}

Вывод выглядит следующим образом:

> frequencies
[[1]]
 [1] 2 6 5 4 5 4 6 5 5 5 3

[[2]]
 [1] 1 7 5 4 5 4 5 6 5 5 3

[[3]]
 [1] 3 5 5 4 5 4 6 5 5 5 3

[[4]]
 [1] 3 5 5 4 4 6 5 5 5 5 3

Я хотел бы иметь его в следующем формате:

[[], [], [], []] это список списка, к первому элементу которого я могу получить доступ, например, к частотам [1], чтобы получить первый список, и т. д. *

Если это невозможно, как я могу получить доступ к первомусписок значений в моем текущем формате?Частоты [1] не возвращают мне первые значения списка.

Спасибо за вашу помощь!

Ребята, еще один вопрос:

Теперь я могу получить доступ к данным, но япредставляет последнюю строку в другом формате:

[[1]]
 [1] 1.00 0.96 0.84 0.74 0.66 0.56 0.48 0.36 0.26 0.16 0.06 0.00

[[2]]
 [1] 1.00 0.98 0.84 0.74 0.66 0.56 0.48 0.38 0.26 0.16 0.06 0.00

[[3]]
 [1] 1.00 0.94 0.84 0.74 0.66 0.56 0.48 0.36 0.26 0.16 0.06 0.00

[[4]]
 [1] 1.000000e+00 9.400000e-01 8.400000e-01 7.400000e-01 6.600000e-01 5.800000e-01 4.600000e-01 3.600000e-01 2.600000e-01 1.600000e-01 6.000000e-02 1.110223e-16

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

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

frequencies - это список, поэтому вам нужно

 frequencies[[1]]

для доступа к первому элементу.Если бы список был назван, вы также можете индексировать по имени элемента.

Списки - это самая общая структура данных, и единственная, которая может

  • быть вложенной: списки в списках внутри ...
  • быть неровными: нетребуются прямоугольные размеры

, поэтому вы должны попытаться преодолеть первоначальное отвращение к тому факту, что оно отличается.Это очень мощные структуры данных, которые используют много за кулисами.

Edit: Кроме того, ряд базовых функций, а также дополнительные пакетыможет пост-обработать списки.Он начинается с чего-то базового, например do.call(), переходит к lapply и заканчивается в пакетах plyr.Продолжайте читать - есть много способов одеть одну и ту же кошку, некоторые лучше, чем другие.

0 голосов
/ 12 сентября 2011

Хотя я полностью согласен с Дирком в отношении полезности списков, вы можете, если все ваши списки имеют одинаковую длину, преобразовать их в кадр данных, используя as.data.frame(), а затем индексировать их по столбцу i frequencies[,i] илипо строке j frequencies[j,]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...