【发布时间】:2020-04-19 16:27:17
【问题描述】:
我最近开始使用 R,感谢 SO 社区帮助我创建了 100 多个 tibbles(以分钟为单位)类似于下面的数据。
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)
由reprex package (v0.3.0) 于 2020 年 4 月 19 日创建
在创建小标题并将其嵌入列表(使用 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 函数?
【问题讨论】: