создать трехмерный массив с разной длиной

Я новичок в R. Я хочу создать трехмерный массив, но не могу определить длину каждого измерения. Я анализирую оценки учеников в классе. Классов 10, но количество учеников разное. И "Оценка" будет 100-90, 89-80, 79-70... до тех пор, пока не будет ни одного ученика, получившего соответствующие оценки. Я собирался использовать пару циклов for с множественным массивом. Если я создам трехмерный массив,

arr<-array(data, dim=c(??,??,??)), dimnames= list("class","grade","average Marks") )

person grace    schedule 11.07.2010    source источник
comment
Можете ли вы пояснить, почему вам нужны трехмерные данные? Каким образом оценки и средние оценки различаются по параметрам, если они основаны на одних и тех же данных?   -  person Guffa    schedule 11.07.2010
comment
вот такие данные: класс = 1:10 Класс 1/Оценки учащихся: 89, 87, 90, 95, 76, 78, 45, 65, 88, 95, 56, 34, 93, 92 100, .. Я хотел сначала узнать: сколько учеников в каждой группе класса и во-вторых: средние оценки каждой группы в каждом классе. Поэтому я собирался использовать 3 измерения, включая Grade, тогда результаты будут иметь arr[class,grade,avr]. Они будут связаны друг с другом. Например, класс 1-> оценка 90~100-> некоторое значение, класс 1-> оценка 80~89-> некоторое значение... и класс 2-> оценка 90~100-> некоторое значение..   -  person grace    schedule 11.07.2010


Ответы (2)


Вы действительно не хотите использовать матрицу для этого. Фрейм данных позволяет вам иметь смесь типов данных.

clasIDs <- c("Firsthour", "Secondhour", "Thirdhour")
class.size <-c(3, 5, 2)  # small sizes for illustration
cls.frame <- data.frame(clasID=rep(clasIDs, class.size), 
                      student.ID = unlist(sapply(class.size, function(x) seq(from=1, to=x))),
                      grade=factor(rep(NA,10) , levels=c("100-90", "89-80", "79-70")) )

> cls.frame
       clasID student.ID grade
1   Firsthour          1  <NA>
2   Firsthour          2  <NA>
3   Firsthour          3  <NA>
4  Secondhour          1  <NA>
5  Secondhour          2  <NA>
6  Secondhour          3  <NA>
7  Secondhour          4  <NA>
8  Secondhour          5  <NA>
9   Thirdhour          1  <NA>
10  Thirdhour          2  <NA>
person IRTFM    schedule 11.07.2010

Вы не можете.

Массив имеет фиксированные размеры. Вы можете использовать максимум по каждому измерению и выделить его вместе с NA для заполнения.

Списки являются альтернативой для различной длины и даже различных типов компонентов.

person Dirk Eddelbuettel    schedule 11.07.2010
comment
ах.. да, кажется, я читал что-то вроде "фиксированного" размера массива... спасибо. - person grace; 11.07.2010