2016-11-21 3 views
-1

У меня есть два списка. Первый (List1) состоит из 126 пунктов, каждый из которых представляет собой dataframe 240 наблюдений 13 переменных, например так:Вычитание списков с различными структурами данных

List1   Large List (126 elements, 3.2 Mb) 
:'data.frame': 240 obs. of 13 variables 
..$X1: num [1:240] 1.5 2.3 6.4 3.3 ... 
..$X2: num [1:240] 3.8 9.4 0.4 6.4 ... 
................................................. 
:'data.frame': 240 obs. of 13 variables 
..$X1: num [1:240] 2.6 0.9 0.5 3.7 ... 
..$X2: num [1:240] 4.9 5.5 5.6 3.1 ... 
................................................. 

List2 также состоит из 126 элементов, но на этот раз только 1 наблюдение 13 переменных , так:

List2   List of 126 
: num[1, 1:13] 5.5 4.2 6.3 9.2 ... 
: num[1, 1:13] 2.1 1.4 7.7 3.9 ... 
................................................. 

Я просто пытаюсь вычесть List2 из List1. Другими словами, я хочу вычесть 13 чисел в каждом элементе List2 из всех 240 строк в каждом элементе List1. Это должно дать мне 126 новых элементов в списке, с 240 наблюдениями из 13 переменных.

Я попытался:

ANOM=Map(function(x,y) x-y, List1, List2) 

и это делает работу, но это не дает нужного результата, поскольку он не удалить правильные столбцы из List2 из правильных столбцов List1. Есть ли что-то простое, что я могу ошибаться здесь?

+0

Я думаю, вы слышали о том, как воспроизводимое примеры полезны на этом сайте, но вот еще одна ссылка в любом случае: http://stackoverflow.com/questions/5963269/how-to-make-a-great- r-воспроизводимый пример/28481250 # 28481250 – Frank

+0

Извинения. Я постарался сделать этот вопрос максимально ясным, но мне было сложно. Я удалю вопрос, который я думаю. –

+0

Я думаю, что вопрос порядочный, но вам нужно уточнить, что вы подразумеваете под _subtract List2 из List1_. Вы имеете в виду что-то вроде 'list (List1 [[1]] - List2 [[0]], List1 [[2]] - List2 [[2]], ..., List1 [[126]] - List2 [[ 126]]) '? или 'для каждой строки в List2 List1 [1] - row ...'? Также поделитесь некоторыми фиктивными данными. – Abdou

ответ

0

Посмотрите, работает ли это?

list3=list() 
for(i in 1:length(list1))list3[[i]]=list1[[i]]-rep(1,240)%*%list2[[i]] 
str(list3) 
+0

Спасибо за комментарий - к сожалению, это возвращает точно тот же результат, что и функция карты, указанная в моем примере. –

+0

попробуйте отредактировать и посмотрите, работает ли он? – Robert

+0

Спасибо @Robert - это решение делает трюк. Я предполагаю, что повторение второго списка было необходимо для того, чтобы списки состояли из одинаково структурированных кадров данных. –

Смежные вопросы