Я пытаюсь запустить эту функцию быстрее. В идеале, я бы просто запускал что-то вроде применения на фреймворке данных и выплескивал результаты гораздо быстрее, чем то, что у меня есть сейчас. То, что функция делает это принимает кадр данных, который выглядит как этотпоиск ближайших строк с применением в R
df
Var1 Var2
5 0
9 0
4 1
6 1
2 2
4 2
затем он проходит через каждую строку и проверяет, что значение из других строк в кадре данных находятся ближе (в обоих Var1 и Переменная2) к значений Var1 и Var2 в строке, в которой вы находитесь. Затем вывод представляет собой список из тех строк, которые ближе всего к каждой другой строке. Например
myFunc(df)
[[1]]
[1] 3 4
[[2]]
integer(0)
[[3]]
[1] 1 6
[[4]]
[1] 1
[[5]]
integer(0)
[[6]]
[1] 3
Так Ряд 1 является ближайшим к значениям в обеих строках 3 и 4, в то время как строка 2 не имеет никакой другой строки рядом с ним. Вот MyFunc
myFunc = function(t) {
x=matrix(); x2=list()
y = matrix(); y2 = list()
for (i in 1:nrow(t)){
for (j in 1:nrow(t)){
#this will check for other rows <= 1 from the row I am currently in
if (abs(t[i,1] - t[j,1]) <= 1) {
x[j] = j
} else { x[j] = NA }
if (abs(t[i,2] - t[j,2]) <= 1) {
y[j] = j
} else { y[j] = NA }
}
x2[[i]] = x
y2[[i]] = y
}
for (i in 1:length(x2)){
x2[[i]] = x2[[i]][!x2[[i]] == i]
y2[[i]] = y2[[i]][!y2[[i]] == i]
}
x2 = lapply(x2, function(x) x[!is.na(x)])
y2 = lapply(y2, function(x) x[!is.na(x)])
#this intersects Var1 and Var2 to find factors that are close to both Var1 and Var2
z = list()
for (i in 1:length(x2)){
z[[i]] = intersect(unlist(x2[[i]]), unlist(y2[[i]]))
}
return(z)}
От ваш код, кажется, что-то вроде 'apply (as.matrix (dist (DF,« максимум »)) == 1L, 2, which)' может быть полезно? –