2016-07-15 2 views
1

У меня есть некоторый вывод из функции veganspecaccum. Это список из 8 объектов различной длины;Извлечь несколько объектов из списка в R

> str(SPECIES) 
List of 8 
$ call  : language specaccum(comm = PRETEND.DATA, method = "rarefaction") 
$ method  : chr "rarefaction" 
$ sites  : num [1:5] 1 2 3 4 5 
$ richness : num [1:5] 20.9 34.5 42.8 47.4 50 
$ sd   : num [1:5] 1.51 2.02 1.87 1.35 0 
$ perm  : NULL 
$ individuals: num [1:5] 25 50 75 100 125 
$ freq  : num [1:50] 1 2 3 2 4 3 3 3 4 2 ... 
- attr(*, "class")= chr "specaccum" 

Я хочу, чтобы извлечь три из списков («богатство», «Sd» и «физических лиц») и преобразовать их в столбцы в кадре данных. Я разработал обходное решение;

SPECIES.rich <- data.frame(SPECIES[["richness"]]) 
SPECIES.sd <- data.frame(SPECIES[["sd"]]) 
SPECIES.individuals <- data.frame(SPECIES[["individuals"]]) 
SPECIES.df <- cbind(SPECIES.rich, SPECIES.sd, SPECIES.individuals) 

Но это кажется неуклюжим и затяжным. Интересно, может ли кто-нибудь предложить новое решение? (Должен ли я смотреть на что-то с лапкой?) Спасибо!

Примеры данных для генерации вывода specaccum;

Set.Seed(100) 
PRETEND.DATA <- matrix(sample(0:1, 250, replace = TRUE), 5, 50) 
library(vegan) 
SPECIES <- specaccum(PRETEND.DATA, method = "rarefaction") 

ответ

0

Мы можем объединить имена в виде vector и извлечь его

SPECIES.df <- data.frame(SPECIES[c("richness", "sd", "individuals")]) 
+1

Спасибо @akrun! Это выглядит намного лучше. Я экспериментировал с подобными вещами, но испортил '(' и '[' – EcologyTom

0

другой вариант, подобный akrun, является:
ctoc1 = as.data.frame (cbind (ВИДОВ $ жирность, SPECIES $ sd, SPECIES $ persons))

Обратите внимание, что в обоих случаях (мой ответ и akrun) вы получите сообщение об ошибке, если длины столбцов не совпадают.
например: SPECIES.df < - data.frame (ВИДЫ [с ("сд", "частота")])
Ошибки в data.frame (богатство = с (20.5549865665613, 33.5688503093388, 41.4708434700877,: аргументов подразумевают отличаясь количеством строк: 7, 47

Если да, то не забудьте использовать функцию() длину:.
длина (ВИДЫ $ сд) < - 47 # это добавит Nas, чтобы увеличить длину столбца
ВИДОВ. df < - data.frame (ВИДЫ [c ("sd", "freq")])
SPECIES.df # dataframe с 2 столбцами и 7 строками.

+0

Hi @Ann, Спасибо за ваши предложения. Я не знал о функции 'length()', хороший отзыв! – EcologyTom

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