r - 是否可以循环多个对象并调用循环中每个对象内的元素
问题描述
在 RI 中,想要循环一组三个函数,输出需要从每个函数中保存,其名称与输入相关。这在应用于一个文件时有效,但我想循环超过 300 多个对象,并且该函数需要在对象中指定元素。
我试图创建对象和输出名称的列表,并使用 for 循环对单个函数 (a.ppp) 进行循环,并收到错误“i[["X"]] 中的错误:下标越界”。我对 for 循环非常陌生,并且编码背景有限,并且不确定我创建的循环结构是否正确。我尝试了多种选择,包括循环数据框或基于其他一些堆栈溢出问题的嵌套循环。
一些玩具数据,代表我的设置。我有数据框,例如。银
a <- data.frame(X = c(1, 2, 3),
Y = c(3,2,1),
Z = c(4,5,6),
M = c('A', 'B', 'C'))
我想遍历以下三个函数。
library(spatstat)
a.ppp = ppp(a$X,a$Y,c(0,3),c(0,3),marks = a$M)
a.nnd = nndist(a.ppp,by=a.ppp$marks)
a.append = cbind(a,a.nnd)
我的尝试包括
listObj = c("a","b","c","d","e","f","g")
list.ppp = c("a.ppp","b.ppp","c.ppp","d.ppp","e.ppp","f.ppp","g.ppp")
for (i in listObj) {
for (j in list.ppp) {
j=ppp(i[["X"]],i[["Y"]],c(0,12),c(0,12),marks=i[["M"]])
}
}
我收到错误:
#Error in i[["X"]] : subscript out of bounds
我的预期结果将是 a 到 g 的 .ppp 和 .append 输出
只是想我会跟进,基于 Joran 非常有用的评论。我通过修改他提供的代码解决了这个问题。我使用的代码如下
library(spatstat)
a <- data.frame(X = c(1, 2, 3),
Y = c(3,2,1),
Z = c(4,5,6),
M = c('A', 'B', 'C'))
#Create a list of all the vectors in the environment - Not an ideal method but
suitable for the case
dfs= mget(ls())
#Create empty lists to be populated during the loop
dfs_ppp = list()
dfs_nnd = list()
dfs_final= list()
for (i in seq_along(dfs)){
dfs_ppp[[i]] <- ppp(dfs[[i]]$X,dfs[[i]]$Y,c(-1,14),c(-1,14),marks = dfs[[i]]$M)
dfs_nnd[[i]] = nndist(dfs_ppp[[i]],by=dfs_ppp[[i]]$marks)
dfs_final[[i]] = cbind(dfs[[i]],dfs_nnd[[i]])
}
解决方案
尝试更多类似的东西:
library(spatstat)
a <- data.frame(X = c(1, 2, 3),
Y = c(3,2,1),
Z = c(4,5,6),
M = c('A', 'B', 'C'))
# Put your data frames (a, b, c, etc.) in a list
dfs <- list(x = a,b = a,z = a)
for (i in seq_along(dfs)){
ppp_obj <- ppp(dfs[[i]]$X,dfs[[i]]$Y,c(0,3),c(0,3),marks = dfs[[i]]$M)
nnd_obj = nndist(ppp_obj,by=ppp_obj$marks)
dfs[[i]]$nnd <- nnd_obj
}
推荐阅读
- swift - 在 AppCode 中打开项目
- javascript - 触发状态改变
- sql - oracle如何查找两个日期之间的月数
- ios - 如何在单元格内容视图中显示标签?
- ms-access - 来自查询的访问报告莫名其妙地增加了列
- r - 使用西班牙语字符(á、é、í、ó、ú、ñ 等)将 .sql 读入 R
- jupyter-notebook - 如何在 haproxy 后面运行 jupyter notebook 并公开其内容?
- javascript - 如何打开带有标签的日期选择器不使用触发器?
- c# - 在 C# 中进行并行调用 - 如何识别哪个调用失败
- django-rest-framework - Django Rest 框架错误 HTTP 405 方法不允许方法 GET