2016-02-06 3 views
1
a=matrix(list(),2,2) 
a[1,2]=list(2) ##works 

a=matrix(list(),2,2) 
a[1,2]=list(2,3) ##doesn't work 

Ошибка в [1, 2] = список (2, 3): количество элементов для замены не кратной длины заменыR матрица списков

Это ошибка сообщение из четвертой строки. Если я пытаюсь

x=list() 
x=list(2,4) 

это работает, я не вижу разницы, как a[1,2] является NULL список ..

Заранее спасибо.

+0

что вы пытаетесь достичь – MichaelChirico

+0

Я считаю, что один матричный элемент может быть длиной 1. –

+0

У меня есть набор данных, который я хочу поместить в двумерную матрицу. Некоторые (многие) элементы матрицы будут иметь несколько записей из набора данных, некоторые элементы матрицы не будут иметь элементов, поэтому я подумал, что будет работать 2-мерная матрица списков. – user3718600

ответ

1

При замене с list(2), посмотрите на вывод:

a=matrix(list(),2,2) 
a[1,2]=list(2) sapply(a, class) 
# [1] "NULL" "NULL" "numeric" "NULL" 

То есть, [1,2] элемент неlist.

list(2,3) может быть принудительно применен к одному элементу; как указывает Ричард Скривен, замена должна быть длиной-1; следующие работы (немного глупо, я согласен):

a = matrix(list(), 2, 2) 
a[1, 2] = list(list(2, 3)) 
a 
#  [,1] [,2] 
# [1,] NULL List,2 
# [2,] NULL NULL 

(только для справки, я понял это, играя с dput, как так :)

#What happens if we declare 'a' as a 
# matrix of appropriately-sized lists to start with? 
a <- matrix(replicate(4, vector("list", 2), simplify = FALSE), 2, 2) 
a 
#  [,1] [,2] 
# [1,] List,2 List,2 
# [2,] List,2 List,2 
# 
# can we replace now? 
a[1,2] <- list(2,3) 
# (same error; what IS 'a[1,2]' for this matrix?) 
dput(a[1, 2]) 
# list(list(NULL, NULL)) 
# BINGO! we must replace 'a[1,2]' with a length-one list. 
Смежные вопросы