Вычитание средств из элементов списка - PullRequest
0 голосов
/ 19 июня 2019

У меня есть следующий список:

result_list
[[1]]
[1] 0.941000 6.039348 0.930000 5.500994

[[2]]
[1] 0.951000 5.696640 0.933000 5.314214

[[3]]
[1] 0.952000 5.989865 0.943000 5.489865

[[4]]
[1] 0.938000 5.456050 0.935000 5.460618

[[5]]
[1] 0.954000 6.254546 0.941000 5.648242

Я добавил элементы для каждого столбца:

Reduce("+",result_list)
[1]  4.73600 29.43645  4.68200 27.41393

и рассчитывается среднее значение:

means=Reduce("+",result_list)/length(result_list)
means
[1] 0.947200 5.887290 0.936400 5.482787

Вопрос: как я могу вычесть каждое среднее значение, только что рассчитанное для соответствующих элементов исходного списка (result_list) ??

Ответы [ 4 ]

2 голосов
/ 19 июня 2019
lapply(result_list, function(x) x - means)

# [[1]]
# [1] -0.0062000  0.1520582 -0.0064000  0.0182074
# 
# [[2]]
# [1]  0.0038000 -0.1906498 -0.0034000 -0.1685726
# 
# [[3]]
# [1] 0.0048000 0.1025752 0.0066000 0.0070784
# 
# [[4]]
# [1] -0.0092000 -0.4312398 -0.0014000 -0.0221686
# 
# [[5]]
# [1] 0.0068000 0.3672562 0.0046000 0.1654554

Данные:

result_list <- list(
  c(0.941000,6.039348,0.930000,5.500994),
  c(0.951000,5.696640,0.933000,5.314214),
  c(0.952000,5.989865,0.943000,5.489865),
  c(0.938000,5.456050,0.935000,5.460618),
  c(0.954000,6.254546,0.941000,5.648242)
)
1 голос
/ 19 июня 2019

Другой подход - связать все ваши списки для создания матрицы:

matr <- do.call(cbind, result_list)
matr - rowMeans(matr)

           [,1]       [,2]      [,3]       [,4]      [,5]
[1,] -0.0062000  0.0038000 0.0048000 -0.0092000 0.0068000
[2,]  0.1520582 -0.1906498 0.1025752 -0.4312398 0.3672562
[3,] -0.0064000 -0.0034000 0.0066000 -0.0014000 0.0046000
[4,]  0.0182074 -0.1685726 0.0070784 -0.0221686 0.1654554
0 голосов
/ 19 июня 2019

Или используя map из purrr

library(purrr)
map(result_list, ~ .x - means)
#[[1]]
#[1] -0.0062000  0.1520582 -0.0064000  0.0182074

#[[2]]
#[1]  0.0038000 -0.1906498 -0.0034000 -0.1685726

#[[3]]
#[1] 0.0048000 0.1025752 0.0066000 0.0070784

#[[4]]
#[1] -0.0092000 -0.4312398 -0.0014000 -0.0221686

#[[5]]
#[1] 0.0068000 0.3672562 0.0046000 0.1654554

или более компактно

map(result_list, `-`, means)
0 голосов
/ 19 июня 2019

Вы можете использовать rapply.

rapply(result_list, `-`, y=Reduce(`+`, result_list)/length(result_list), how="l")

или следующие @ Коул:

rapply(result_list, `-`, y=colMeans(do.call(rbind, result_list)), how="l")
# [[1]]
# [1] -0.0062000  0.1520582 -0.0064000  0.0182074
# 
# [[2]]
# [1]  0.0038000 -0.1906498 -0.0034000 -0.1685726
# 
# [[3]]
# [1] 0.0048000 0.1025752 0.0066000 0.0070784
# 
# [[4]]
# [1] -0.0092000 -0.4312398 -0.0014000 -0.0221686
# 
# [[5]]
# [1] 0.0068000 0.3672562 0.0046000 0.1654554

Данные

result_list <- list(c(0.941, 6.039348, 0.93, 5.500994), c(0.951, 5.69664, 0.933, 
5.314214), c(0.952, 5.989865, 0.943, 5.489865), c(0.938, 5.45605, 
0.935, 5.460618), c(0.954, 6.254546, 0.941, 5.648242))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...