R создать список или матрицу - PullRequest
1 голос
/ 17 апреля 2020

Если я повторяю этот код

x<-1:6
n<-40
M<-200
y<-replicate(M,as.numeric(table(sample(x,n,1))))
str(y)

, иногда R решает создать матрицу, а иногда создает список. Можете ли вы объяснить мне причину этого? Как я могу быть уверен, что это матрица или список?

Если вы выбрали M очень маленький, например 10, он почти всегда будет создавать матрицу. Если вы выбрали M очень большой, например 2000, он создаст список.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Вы получаете список случаев, когда не все числа в x выбраны.

Вы всегда можете вернуть список, используя simplify = FALSE.

y <- replicate(M, as.numeric(table(sample(x,n,TRUE))), simplify = FALSE)

Кроме того, вы используете 1 для установки replace аргумента. Лучше использовать логический аргумент, т.е. TRUE.


Чтобы всегда возвращать матрицу, мы можем сделать:

sapply(y, `[`, x)

Это добавит NA для значений, где длина не равна.

0 голосов
/ 17 апреля 2020

Может быть, это поможет [https://rafalab.github.io/dsbook/r-basics.html#data -типы] [1] Векторы в матрице должны быть одинакового типа и длины. Векторы в списке могут содержать элементы разных классов и длины. Попробуйте это:

x<-1
y<-2:7
z<-matrix(x,y)
z<-list(x,y)

В первом случае вы получите матрицу 2 строки и 1 столбец, потому что вектор y длиннее. Во втором случае вы получите список с элементами разной длины. Также очень полезна функция

str()

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

class()

.

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