2016-09-18 3 views
4

Привет, мне было интересно, есть ли способ хранения вектора в массив или матрицу. , например,хранение вектора в матрице по r с неизвестной длиной вектора

array1<-array(dim=c(1,2)) 
vector1<-as.vector(1:5) 
vector2<-as.vector(6:10) 
array1[1,1]<-vector1 
array1[1,2]<-vector2 

так что, когда я называю для

array1[1,1] 

я получит

[1] 1 2 3 4 5 

Я пытался делать то, что я сделал выше, и то, что я получаю ошибку

number of items to replace is not a multiple of replacement length 

is t вот способ обойти это?

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

1 вектор т.е. может быть длиной от 6 и вектора 2 может быть длиной 7.

спасибо!

+0

Что вы хотите, чтобы заполнить короткий вектор с? – aichao

+1

Используйте списки вместо массивов, если длина не равна. – Roland

+0

Сколько измерений вы хотите иметь в своем списке? Вектор может быть сохранен в списке и получен с помощью 'my_list [[1]]', поэтому я не уверен, почему вы хотите использовать два индексаных массива 'array [1,1]'. – RHertel

ответ

4

Попробуйте список:

my_list <- list() 
my_list[[1]] <- c(1:5) 
my_list[[2]] <- c(6:11) 

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

> my_list[[1]] 
#[1] 1 2 3 4 5 
+0

Может ли список иметь несколько строк и столбцов? – Donkeykongy

+0

@Donkeykongy Список может содержать матрицы или data.frames с произвольным количеством строк и столбцов. Но, учитывая этот вопрос в комментарии, я предполагаю, что ответ Роланда описывает то, что вы ищете, т. Е. Матрицу списков, а не список матриц. – RHertel

1

Вы можете использовать матрицу списков:

m <- matrix(list(), 2, 2) 
m[1,1][[1]] <- 1:2 
m[1,2][[1]] <- 1:3 
m[2,1][[1]] <- 1:4 
m[2,2][[1]] <- 1:5 
m 
#  [,1]  [,2]  
#[1,] Integer,2 Integer,3 
#[2,] Integer,4 Integer,5 

m[1, 2] 
#[[1]] 
#[1] 1 2 3 

m[1, 2][[1]] 
#[1] 1 2 3 
Смежные вопросы