2017-01-09 4 views
0

Я уверен, что это глупый вопрос, но я не могу понять, что случилосьdata.frame в матрицу (R), rownames() глупая ошибка

У меня есть data.frame («data.csv») из 93 х 28 Я хочу, чтобы преобразовать в матрицу для дальнейшего черчения, это выглядит следующим образом:

SYMBOL BT.20 CAL.51 MDA.MB.436 BT.549 
A 3.039 4.908 3.865 3.818 
B 4.349 5.399 6.071 5.313 
C 7.509 8.091 6.48 6.660 
D 3.429 4.394 3.622 3.873 
E 3.369 6.716 3.557 3.346 

код

data <- read_csv("data.csv") 
rnames <- data[,1]    # assign labels in column 1 to "rnames" 
mat_data <- data.matrix(data[,2:28]) # transform column 2 - end into a matrix 
rownames(mat_data) <- rnames     # assign row names 

производит

ERROR: Error in `rownames<-`(`*tmp*`, value = list(SYMBOL = c("A", "B", : 
    length of 'dimnames' [1] not equal to array extent 

колонка 1 оленья кожа имеют одинаковые имена или отсутствующие значения

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

редактировать: с read.csv() вместо этого, он прекрасно работает

+2

Необходимо отлаживать код. Добавьте 'print (rnames)'. – user31264

+1

или вы можете публиковать результат 'str (rnames)' и 'str (mat_data)'. Похоже, что проблема с размерностью – Bastien

+0

Вы пробовали 'read.csv (" data.csv ", row.names = 1)'? Он присваивает их в 'read.csv'. –

ответ

2

ошибка говорит о том, что значение быть назначены на rownames - это список, а «длина» списка с одним вектором в нем равна 1, а не длина вектора. Я не могу сказать, почему это должно происходить, поскольку обычное поведение заключается в том, что функция «[» «отбрасывает» одиночные столбцы в атомарные векторы. Как и вы, я бы ожидал rnames быть атомарным вектор длины 39, но в этом случае вы должны использовать вместо этого:

rownames(mat_data) <- unlist(rnames)    # assign row names 

Богатые и МАро имеют лучшие глаза, чем я. Функция read_csv создает объект с другим классом и связанной с ним функцией извлечения, чем read.csv. Так как вы находитесь в «hadleyverse», вы поэтому должны использовать это:

rnames <- data[[1]] 

В tibble -classed объекты имеют другую версию [ -функции, чем сделать data.frames. Функция [[-функция действует одинаково для обоих классов.

+0

Может быть вызвано использованием 'tibble' или' dplyr': 'as_tibble (mtcars) [, 1]' - это полубайт, а не вектор. 'tibble'« исправляет »поведение' drop = TRUE' по умолчанию '' ["()' –

+0

Если это правда, тогда 'unlist' будет работать, но это может быть ненужным с помощью' rnames <- data [[1]] 'как создание' rnames', так как '' [['' делает «падение» размеров. –

+0

спасибо миллиону парней –

Смежные вопросы