테이블에 두 개의 데이터 집합이 저장되어 있습니다. 하나는 [a, b]
집합이고 다른 하나는 [x, Sx, y, Sy, rho]
집합입니다. 나는 (a, b, x, Sx, y, Sy, rho)
이 필요한 확률 함수 f
을 가지고 있습니다. 결국 나는 첫 번째 [a, b]
에 대한 모든 [x, Sx, y, Sy, rho]
에 대한 확률 결과의 합을 찾고 싶습니다. 그런 다음 두 번째 [a, b]
이상 모든 [x, Sx, y, Sy, rho]
의 합, 등등 ... 나는 [x, Sx, y, Sy, rho]
파일에 몇 백 행과 [a, b]
파일에 천 몇 백 행을하고 싶은다중 변수가있는 다중 루프가 발생하지 않도록하는 방법 R
을 찾을 수 있습니다.
두 개의 루프를 사용하지 않고이 작업을 수행 할 방법이 있는지 궁금합니다. 나는 다음과 같은 것을 시도해 보았고, 내가 원하는 방식대로 작동하지 않지만, 너무 느리다는 것을 안다.
도움이 될지 모르겠지만 코드에 함수를 추가했습니다. 죄송합니다. 함수 자체가 엉망이며 제대로 포맷되지 않았습니다.
# data file with (a, b)
data <- matrix(c(1, 0, 1, 1, 0.5, 0), nrow=3, ncol=2)
colnames(data) <- c("a", "b")
Ndat <- dim(data)
Ndata <- Ndat[1]
# data2 file with (x, Sx, y, Sy, rho)
data2 <- matrix(c(1, 0.1, 1, 0.1, 0.002, 2, 0.1, 2, 0.1, 0.000001,
2, 0.1, 1, 0.1, 0.002), nrow=3, ncol=5)
colnames(data2) <- c("x", "Sx", "y", "Sy", "rho")
Ndat2 <- dim(data)
Ndata2 <- Ndat[1]
# function requires variables (a, b, s, Sx, y, Sy, rho)
Prob <- function(a, b, Xi, sX, Yi, sY, rho) {sqrt(1 + a^2) * (
exp(-((b + a * Xi - Yi)^2/(
2 * ((a^2 * sX^2) -
(2 * a * rho * sX * sY) + sY^2)))) * sqrt((
1 - rho^2)/(
a^2 * sX^2 - 2 * a * rho *sX *sY + sY^2))/(
sqrt(2 * pi) * sqrt(1 - rho^2)))
}
# Here is my weak attempt
Table <- NULL
Table <- for (j in 1:Ndata) {
sum (for (i in 1:Ndata2) {
Datatable[i] = Prob(data[j, a], data[j, b], data2[i, x],
data2[i, Sx], data2[i, y], data2[i, Sy],
data2[i, rho])
})
}
나는 apply
기능의 주위에 내 머리를 감싸는 매우 힘든 시간을 보내고 있어요 그리고 그들은/사용해야합니다 때. 나는 아마도 내가 충분한 정보를 추가하지 못했기 때문에 나를 도울 수있는 제안은 훌륭 할 것이다. 나는 R 프로그래밍뿐만 아니라 프로그래밍에도 익숙하지 않으므로 부적절한 어휘 나 서식을 용서해주십시오.
data
에 숫자 또는 행을 정의하여 Ndata
을 전역으로 정의하는 것이 더 좋은 방법 일 수 있습니다. 그러나 이것들이 처음 발견했습니다.
이 함수는 재귀 적이어서는 안되지만 필자가 작성한 것처럼 보입니다. 나는 R에 소개 자습서에 많은 시간을 보냈으며, 여전히 매우 어려운 시간을 어떻게 이해하고 있는가? apply
기능 모음이 가장 잘 구현되었다.
의 첫 번째 행에서 a, b
을 사용하여 data2
에있는 각 행에이 함수를 적용하고 싶습니다. 그런 다음 sum
모든 이들에 대한 확률. 그런 다음 반복 내가이 작업을 수행하는 쉬운 방법이 느낌이 data2
재귀 프로그래밍의 일부 형식을 시도하고 있습니까? 당신의'f' 함수는 스스로를 호출하지만, 그것이 어떻게 작동하는지 명확하지 않습니다. – gung