Это мой первый пост, поэтому, пожалуйста, извините меня, если я звучу глупо или ответ, который я ищу, уже существует.
Моя основная проблема заключается в следующем: я создал таблицу, содержащую 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'
.
Я абсолютный новичок в этом типе манипуляций с данными, поэтому, очевидно, я выше головы и буду очень признателен за любую помощь, которую могу получить.
my_tibble
), желаемые выходные данные, код пытается включить необходимые пакеты - все копировать-вставить-запустить в новом / чистом R-сеансе. Почему? Так всем легче следить и участвовать, не гадая. И вы увеличиваете шансы получить полезные комментарии и ответы. :) - person lukeA   schedule 05.01.2017IVs_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.2017mutate
с метлой выдает Ошибка: несовместимо с STRSXP. Без метлы Ошибка: неверный размер результата (2), ожидается 5 или 1 + предупреждение. - person lukeA   schedule 05.01.2017