Я недавно начал использовать R, и я благодарен SO-сообществу за помощь в создании более 100 столбцов (разделенных на минуты) данных, аналогичных приведенным ниже.
time1 pid mlat mlong malt m_time
1 23:57:00 2A 434. 8347. 0.140 m_2357
2 23:57:00 2D 433. 8353. 0.0702 m_2357
3 23:57:00 3D 433. 8349. 0.0135 m_2357
4 23:57:00 4A 434. 8364. 0.147 m_2357
5 23:57:00 4B 433. 8351. 0.162 m_2357
Функция, представленная ниже, предоставляет решение для одного набора данных.
pd<- function(mtime){
dm <- data.frame(x=mtime$mlat, #dm = distance matrix
y=mtime$mlong,
z=mtime$malt,
row.names= mtime$pid)
ed<- dist(dm) #em = euclidean distance
em <- as.matrix(ed) #em = euclidean matrix
em <- melt(em)[melt(upper.tri(em))$value,]
names(em)<- c("pid","intercept", "distance")
e_df <- as.data.frame(em)
e_df$distance <- round((e_df$distance/.0005399565), digits = 0)
e_df<- arrange(e_df,distance)
write.csv(e_df,"m_2357.csv")
}
pd(m_2357)
Создано в 2020-04-19 пакетом Представить (v0.3.0)
После создания и вложения тиблы в список (использующий m_time), наиболее близкий к решению этой проблемы, я пришел к следующему:
mylist2 <- lapply(mylist, function(x){
dm <- data.frame(x=mylist[[i]][["mlat"]],
y=mylist[[i]][["mlong"]],
z=mylist[[i]][["malt"]],
row.names= mylist[[i]][["pid”]]) …
Это дублирует одно правильное решение 180 раз, поэтому я думаю, что я близок (я также сохранен как значение в моем может ли это быть проблемой?). К сожалению, я не смог найти никаких примеров функций, выполняющих несколько вычислений для списка. После того, как я провел большую часть дня, играя с комбинациями, я решил обратиться за помощью.
Мой вопрос: после того, как я внесу данные в список, как мне написать функцию lapply для каждого тибля в списке ?