Что-то вроде этого?
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]
Это должно найти первое «а» внутри каждого «td» в html, который вы предоставляете. Вы можете настроить td.find
, чтобы быть более конкретным, или использовать findAll
, если у вас есть несколько ссылок внутри каждого td.
UPDATE: комментарий Daniele, если вы хотите убедиться, что у вас нет None
в списке, вы можете изменить понимание списка таким образом:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]
Что в основном просто добавляет проверку, чтобы увидеть, есть ли у вас фактический элемент, возвращаемый td.find('a')
.
Другой подход, использующий только base
функции для изменения структуры объекта:
listVec <- lapply(all.dat, c, recursive=TRUE)
m <- do.call(cbind, listVec)
Теперь вы можете вычислить mean
с помощью rowMeans
или median
с помощью apply
:
means <- rowMeans(m)
medians <- apply(m, 1, median)
Не могли бы вы просто использовать вложенные lapply()
вызовы?
Похоже, это дает правильный результат на моей машине
mean.dat <- lapply(all.dat, function (x) lapply(x, mean, na.rm=TRUE))
Вам было бы проще изменить структуру данных, объединив три двумерные матрицы в один трехмерный массив (используя библиотеку abind
). Тогда решение будет более прямым, используя apply
и указав размеры для усреднения.
РЕДАКТИРОВАТЬ:
Когда я ответил на вопрос, он был помечен homework
, поэтому я просто дал подход. Оригинальный плакат удалил этот тег, поэтому я возьму его / ее на слово, что это не так.
library("abind")
all.matrix <- abind(all.dat, along=3)
apply(all.matrix, c(1,2), mean)