В RI хотелось бы зациклить набор из трех функций, причем вывод требует сохранения от каждой функции с именем, связанным с входом.Это работает, когда применяется к одному файлу, но я хотел бы зациклить более 300+ объектов, и функция требует указания элементов внутри объекта.
Я попытался создать списки объектов и имена выходных данных и зациклить его с помощьюцикл for для одной функции (a.ppp) и получил ошибку «Ошибка в i [[" X "]]: индекс за пределами».Я очень новичок в циклах for и имею ограниченный фон кодирования и не уверен, что структура цикла, которую я создал, является правильной.Я пробовал несколько вариантов, в том числе циклы над кадром данных или вложенные циклы на основе некоторых других вопросов переполнения стека.
Некоторые игрушечные данные, представляющие мои настройки.У меня есть данные, например.ag
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
Мои ожидаемые результаты будут выходными .ppp и .append для a до g
Just Thought, которым я буду следовать, основываясь на чрезвычайно полезном комментарии от 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]])
}