Столбцы списка в таблицах: Могу ли я связать столбец списка с другим столбцом списка?

Это мой первый пост, поэтому, пожалуйста, извините меня, если я звучу глупо или ответ, который я ищу, уже существует.

Моя основная проблема заключается в следующем: я создал таблицу, содержащую 4 столбца (символьный столбец, два столбца данных и столбец, содержащий матрицу расстояний для каждого из уровней символьного столбца), и я пытаюсь создать функцию, которая использует матрицы расстояний из 4-го столбца как зависимая переменная и некоторые независимые переменные из второго столбца. Проблема в том, что R постоянно предупреждает меня, что не может найти зависимую переменную.

Я использовал следующие пакеты:

library(easypackages)
libraries('tidyverse', 'broom')

Таблица с моими IV выглядит так:

IVs_tibble
 # A tibble: 175 × 8
     Site Region  IV.1  IV.2  IV.3  IV.4  IV.5  IV.6
    <chr>  <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1   Site.1    A   387   169   460   234   137   445
2   Site.2    A   197   172   449   192   141   422
3   Site.3    A    86   179   432    78   147   398
4   Site.4    A    14   183   404     4   152   375
5   Site.5    B    86   179   407    80   148   382
6   Site.6    B    18   175   422   154   146   397
7   Site.7    C   132   172   429   211   142   413
8   Site.8    C    99   178   404   120   147   385
9   Site.9    D    73   177   409   150   146   382
10  Site.10   D    77   175   417   182   145   383
# ... with 165 more rows

Затем я вкладываю его:

by_region <- IVs_tibble %>% group_by(Region) %>% nest()

А вот как это выглядит:

 by_region
# A tibble: 6 × 2
  Region        data
   <chr>        <list>
1  A         <tibble [60]>
2  B         <tibble [84]>
3  C         <tibble [10]>
4  D         <tibble [6]>
5  E         <tibble [13]>
6  F         <tibble [2]>

Впоследствии я создаю еще один тиббл, содержащий необработанные данные о присутствии / отсутствии:

regions
# A tibble: 175 × 984
   Region   Site    Taxon.1   Taxon.2    Taxon.3
    <chr>   <chr>   <dbl>     <dbl>      <dbl>
1 A         Site.1   1         1          0
2 A         Site.1   0         1          0
3 B         Site.1   1         1          1
4  B        Site.1   0         0          0
5 C         Site.1   1         0          1
6 C         Site.1   0         0          1
7 D         Site.1   1         0          0
8 D         Site.1   1         1          0
9 D         Site.1   0         0          0
10 F        Site.10  0         1          0
# ... with 165 more rows, and 982 more variables: (these contain taxa names)

Тогда я тоже вкладываю этот кусочек:

rg <- regions %>% group_by(Region) %>% nest()

А это выглядит так:

 rg
# A tibble: 6 × 2
  Region        IVs
   <chr>        <list>
1  A         <tibble [60]>
2  B         <tibble [84]>
3  C         <tibble [10]>
4  D         <tibble [6]>
5  E         <tibble [13]>
6  F         <tibble [2]>

И я переименовываю столбец данных, чтобы соединить его с таблицей, содержащей IV:

rr <- rg %>% rename(Communities = data)
rr
# A tibble: 6 × 2
  Region        Communities
   <chr>        <list>
1  A         <tibble [60]>
2  B         <tibble [84]>
3  C         <tibble [10]>
4  D         <tibble [6]>
5  E         <tibble [13]>
6  F         <tibble [2]>

В качестве следующего шага я создаю функцию для вычисления матриц:

betamatrices <-function(df){vegan::betadiver(df, method='sim')}
rr <- rr %>% mutate(model = map(data,betamatrices)) 

Таблица rr теперь выглядит так:

rr
    # A tibble: 6 × 3
  Region          Communities        Dist.matrix
   <chr>           <list>             <list>
1     A            <tibble [60]>      <S3: dist>
2     B            <tibble [84]>      <S3: dist>
3     C            <tibble [10]>      <S3: dist>
4     D            <tibble [6]>       <S3: dist>
5     E            <tibble [13]>      <S3: dist>
6     F            <tibble [2]>       <S3: dist>

И затем я присоединяюсь к двум тубам:

my_tibble <- by_region %>% left_join(rr)

Табл выглядит так:

my_tibble
# A tibble: 6 × 4
 Region        IVs               Communities        Dist.matrix
   <chr>       <list>            <list>             <list>
1  A         <tibble [60]>       <tibble [60]>       <S3: dist>
2  B         <tibble [84]>       <tibble [84]>       <S3: dist>
3  C         <tibble [10]>       <tibble [10]>       <S3: dist>
4  D         <tibble [6]>        <tibble [6]>        <S3: dist>
5  E         <tibble [13]>       <tibble [13]>       <S3: dist>
6  F         <tibble [2]>        <tibble [2]>        <S3: dist> 

И функция, которую я хочу применить, выглядит так:

mrm_model <- function(df){ecodist::MRM(Dist.matrix~dist(IV.1) + dist(IV.2),data = (df))}

Когда я пытаюсь вычислить это с помощью следующего кода:

my_tibble <- my_tibble %>% mutate(mrm = map(IVs,mrm_model)),

Я получаю это сообщение об ошибке:

Error in mutate_impl(.data, dots) : object 'Dist.matrix' not found.

Ты хоть представляешь, почему это все время всплывает?

Когда я пытаюсь "исправить" функцию знаком $:

mrm_model <- function(df){ecodist::MRM(my_tibble$Dist.matrix~dist(Area),data = (df))},

Я получаю следующее предупреждение:

Error in mutate_impl(.data, dots) : invalid type (list) for variable 'my_tibble$Dist.matrix'.

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


person Kostas_k84    schedule 05.01.2017    source источник
comment
Добро пожаловать в SO. Пожалуйста, наведите указатель мыши на тег R - он запрашивает минимально воспроизводимый пример. Вот руководство. Предлагаю соответствующим образом отредактировать ваш вопрос. Хороший обычно предоставляет минимальные входные данные (my_tibble), желаемые выходные данные, код пытается включить необходимые пакеты - все копировать-вставить-запустить в новом / чистом R-сеансе. Почему? Так всем легче следить и участвовать, не гадая. И вы увеличиваете шансы получить полезные комментарии и ответы. :)   -  person lukeA    schedule 05.01.2017
comment
Мне очень жаль неадекватную структуру моего вопроса! Я сразу добавлю пакеты, которые использовал, а также часть своих данных! Спасибо за внимание!   -  person Kostas_k84    schedule 05.01.2017
comment
Не беспокойтесь, мы все начали с SO. Тем не менее, каждому по-прежнему требуется ~ 10 минут, чтобы воспроизвести все ваши блюда. Вы можете написать IVs_tibble <- read.table(header=T, stringsAsFactors=F, text="Site Region IV.1 IV.2 IV.3 IV.4 IV.5 IV.6\n1 Site.1 A 387 169 460 234 137 445") или предоставить результат dput(IVs_tibble) из dput(head(IVs_tibble)), за которым следует -> IVs_tibble, чтобы сделать вещи удобными (например, копирование-вставка-запуск). В общем, лучше всего держать вещи минимальными - почему бы просто не предоставить rr, используя dput(rr)?   -  person lukeA    schedule 05.01.2017
comment
Следуя вашим тибетам, я не могу воспроизвести вашу ошибку. mutate с метлой выдает Ошибка: несовместимо с STRSXP. Без метлы Ошибка: неверный размер результата (2), ожидается 5 или 1 + предупреждение.   -  person lukeA    schedule 05.01.2017


Ответы (1)


Я понял, что проблема может быть решена, если таблица содержит ОБЕИХ данные о присутствии / отсутствии и IV. В любом случае, спасибо за интерес lukeA

person Kostas_k84    schedule 10.10.2017