R Использование карты с безымянной функцией, требующей двух переменных - PullRequest
0 голосов
/ 26 мая 2020

Я задал этот вопрос в пятницу ( R Faceted qqplots с столбцом и строкой ), и @Akrun дал очень полезный ответ, который, казалось, решил мою проблему. Однако мне нужно было внести небольшие изменения в его ответ, чтобы x и y были уникальными комбинациями , а не просто списком уникальных значений в каждом столбце, но теперь я не могу успешно завершить этот код.

Фиктивные данные:

df <- mtcars
# Name columns as I have in my real data
df$rows <- df$cyl
df$columns <- df$gear
df$Modeled <- df$wt
df$Observed <- df$mpg

Code1:

  dat_sort <- do.call(rbind, Map(function(x, y) {
    i1 <- df$rows == x & df$columns == y
    print(nrow(df$Observed[i1]))
    print(nrow(df$Modeled[i1]))
    data.frame(rows = x, columns =y,
               Observed = sort(df$Observed[i1]),
               Modeled = sort(df$Modeled[i1]))},
    unique(df$rows[c("rows", "columns")]), unique(df$columns[c("rows", "columns")])))  

Ошибка:

Error in data.frame(rows = rep(x, sum(i1 == TRUE)), columns = rep(y, sum(i1 ==  : 
  arguments imply differing number of rows: 6888, 455, 574
Called from: data.frame(rows = rep(x, sum(i1 == TRUE)), columns = rep(y, sum(i1 == 
    TRUE)), Observed = sort(df$Observed[i1 == TRUE]), Modeled = sort(df$Modeled[i1 == 
    TRUE]))

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 26 мая 2020

Оказывается, у меня было несколько проблем. Я отправляю свой ответ на случай, если кто-то столкнется с подобной проблемой.

Самая большая проблема заключалась в том, что map () нужны ВЕКТОРЫ для прохождения. В моем коде я оставил это как data.frame. Это было решено путем использования [[столбец №]] в моем коде ниже.

В моем реальном наборе данных есть значения NA в наблюдаемых данных, но функция сортировки по умолчанию исключает NA.

  ## Sort data by unique combination of rows and columns
  dat_sort <- do.call(rbind, Map(function(x, y) {
    i1 <- df$rows == x & df$columns == y
    data.frame(rows = x, 
               columns = y,
               Observed = sort(df$Observed[i1], decreasing = FALSE, na.last = FALSE),
               Modeled = sort(df$Modeled[i1], decreasing = FALSE, na.last = FALSE)
               )},
    unique(df[,c("rows", "columns")])[[1]], unique(df[,c("rows", "columns")])[[2]]))  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...