Почему lapply работает, а применять - нет? - PullRequest
0 голосов
/ 15 января 2020

Мои данные:

 df_1 <- data.frame(
      x = replicate(
        n = 3, 
        expr = runif(n = 30, min = 20, max = 100)
      ), 
      y = sample(
        x = 1:3, size = 30, replace = TRUE
      )
    )

Работает следующий код с lapply:

lapply(X = names(df_1)[c(1:3)], FUN = function(x) {
  pairwise.t.test(
    x = df_1[, x], 
    g = df_1[['y']], 
    p.adj = 'bonferroni'
  )
})

Но с apply нет:

apply(X = names(df_1)[c(1:3)], MARGIN = 2, FUN = function(x) {
  pairwise.t.test(
    x = df_1[, x], 
    g = df_1[['y']], 
    p.adj = 'bonferroni'
  )
})

Ошибка в применении (X = имена (df_1) [c (1: 3)], MARGIN = 2, FUN = функция (x) {: dim (X) должна иметь положительную длину

Почему проблема? Они не эквивалентны?

1 Ответ

1 голос
/ 15 января 2020

Для применения вы должны вместо этого использовать

apply(X = df_1[1:3], MARGIN = 2, FUN = function(x) {
    pairwise.t.test(
    x = x, 
    g = df_1[['y']], 
    p.adj = 'bonferroni'
 )
})

, потому что из ?apply

apply возвращает вектор, если MARGIN имеет длину 1 и массив измерения dim ( X) [MARGIN] в противном случае.

В своей попытке вы используете names(df_1)[c(1:3)] в качестве аргумента для apply, который имеет

dim(names(df_1)[c(1:3)])[2]
#NULL

Следовательно, вы получаете ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...