r - 在 r 中执行多个计算的列表函数
问题描述
我最近开始使用 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 包(v0.3.0)于 2020-04-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 函数?
解决方案
无需扩展现有功能代码。只需将您的数据框/小标题列表直接运行到您的函数中,lapply
例如:output <- lapply(mylist, pd)
.
但是,您的函数现在输出一个名为"m_2357.csv"
. 因此,所有迭代都将替换此文件,将上次运行结果保留在此单个文件中。因此,您需要使文件名动态显示为您的m_time列。另外,请考虑返回数据帧,而不是write.csv
通常的结果NULL
。
pd <- function(mtime){
dm <- data.frame(x=mtime$mlat,
y=mtime$mlong,
z=mtime$malt,
row.names= mtime$pid)
...
# DYNAMIC VARIABLE NAME
write.csv(e_df, paste(mtime$m_time[1], ".csv")
# RETURN ACTUAL DATA FRAME
return(e_df)
}
new_df_list <- lapply(mylist, pd)
顺便说一句,如果您的原始设置是一个大型数据框/小标题,所有 180 个小标题与列m_time堆叠在一起以区分集合,您可以使用by
(面向对象的包装器tapply
)运行函数,按列传递子集, m_time , 进入函数:
new_df_list <- by(my_master_data_frame, my_master_data_frame$m_time, pd)
推荐阅读
- ios - 如何在顶部制作表格视图导航
- knockout.js - 从服务器更新时集合对象的计算属性未更新
- mysql - phpMyAdmin 数据库导出文件大小随每个暂定而变化
- reactjs - 无法将 react-dom 15.6.1 更新到 16.xx
- jquery - .ajax() 方法的数据参数值未传递给 asp.net core 2.0 中的 C# 函数
- dump - Dcmtk 转储,通过不加载所有内容来减少时间
- python - 在 Python 中,所有变量都是空指针吗?
- shell - 如何将包含空格的变量传递给配置单元?
- c# - 为什么 CustomTaskPane 抛出空异常
- javascript - 从 jQuery 中的 ajax 请求中去除初始问号