R에서 필요한 조건이 충족 될 때까지 매개 변수 세트에서 재귀 적 리샘플링하는 방법은 무엇입니까?

Biotechgeek

A1, A2, A3, B1, B2, B3을 상태 변수로 사용하고 값에 저장된 매개 변수가있는 데이터 집합이 있습니다. A1, A2, A3, B1, B2, B3이 모두 양성일 때 조건을 찾으려고합니다. 매개 변수 값의 가능한 모든 조합을 거치도록이 코드를 반복하고 A1에서 B3까지 양수이면 별도의 출력에 저장합니다 (R에서는 몇 시간이 걸릴 수 있음).

library(Ryacas)
fromval <- 0.1
toval <- 500
byval <- 0.1
repval <- 5000

f <- seq(from = fromval, to = toval, by = byval)
f1 <- seq(from = fromval, to = toval, by = byval)
ep <- seq(from = fromval, to = toval, by = byval)
a1 <- seq(from = fromval, to = toval, by = byval)
h <- seq(from = fromval, to = toval, by = byval)
e1 <- seq(from = fromval, to = toval, by = byval)
m1 <- seq(from = fromval, to = toval, by = byval)
mp <- seq(from = fromval, to = toval, by = byval)
ab <- seq(from = fromval, to = toval, by = byval)
r <- seq(from = fromval, to = toval, by = byval)
fp <- seq(from = fromval, to = toval, by = byval)
R <- seq(from = fromval, to = toval, by = byval)

values <- list(f1=f1, ep=ep, a1=a1, h=h, e1=e1, m1=m1, mp=mp,f=f,ab=ab,r=r,fp=fp,R=R)

eqs <- list(A1= expression((a1*ep*f*f1*fp*R - e1*ep*fp^2*m1*(h + R) + ep^2*f1*(ab*fp - a1*mp*r)*(h + R) - sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) +  (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R))) ^2)))/(2*a1*ep*f1*(e1*fp*m1 + ep*f1*r)*(h + R))),
  
  A2= expression((ep*fp*(a1*f^2*f1^2*R^2 - e1*f*f1*m1*(fp - a1*mp)*R*(h + R) + e1^2*fp*m1^2*mp*(h + R)^2) + ep^2*f1*(h + R)*(ab*fp*(f*f1*R + e1*m1*mp*(h + R)) + mp*r*(-(a1*f*f1*R) + e1*m1*(2*fp - a1*mp)*(h + R))) + e1*h*m1*mp*sqrt(ep**2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)* (a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) +  (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R)))^2)) + f*f1*R*sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)* (a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) +  (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R)))**2)) + e1*m1*mp*R*sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)* (a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) + (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R)))^2)))/(2*ep^2*f1*fp*mp*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)))),
  A3= expression((ep^2*f1*(ab*fp + a1*mp*r)*(h + R) + ep*fp*(a1*f*f1*R - e1*m1*(fp - 2*a1*mp)*(h + R)) - sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) + (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R))) ^2)))/(2*a1*fp*(e1*fp*m1 + ep*f1*r)*(h + R))),
  
  B1 = expression((1/(2* a1* ep* f1* (e1* fp* m1 + ep* f1* r)* (h + R)))*(a1* ep* f* f1* fp* R - e1* ep* fp^2* m1* (h + R) + ep^2* f1* (ab* fp - a1* mp* r) *(h + R) +sqrt(ep^2* (-4* a1* fp* mp* (e1* fp* m1 + ep* f1* r)* (h + R)* (a1* f* f1* R - e1* m1* (fp - a1* mp)* (h + R)) + (ab* ep* f1* fp* (h + R) - e1* fp* m1* (fp - 2* a1* mp)* (h + R) + a1* f1* (f* fp* R + ep* mp* r* (h + R)))^2)))),
  
  B2= expression(-(-(ep*fp*(a1*f^2*f1^2*R^2 - e1*f*f1*m1*(fp - a1*mp)*R*(h + R) + e1^2*fp*m1^2*mp*(h + R)^2)) - ep^2*f1*(h + R)*(ab*fp*(f*f1*R + e1*m1*mp*(h + R)) + mp*r*(-(a1*f*f1*R) + e1*m1*(2*fp - a1*mp)*(h + R))) + e1*h*m1*mp*sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) + (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R)))^2)) + f*f1*R*sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) + (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R)))^2)) + e1*m1*mp*R*sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) + (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R)))^2)))/(2*ep^2*f1*fp*mp*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)))),
  
  B3= expression((ep^2*f1*(ab*fp + a1*mp*r)*(h + R) + ep*fp*(a1*f*f1*R - e1*m1*(fp - 2*a1*mp)*(h + R)) + sqrt(ep^2*(-4*a1*fp*mp*(e1*fp*m1 + ep*f1*r)*(h + R)*(a1*f*f1*R - e1*m1*(fp - a1*mp)*(h + R)) + (ab*ep*f1*fp*(h + R) - e1*fp*m1*(fp - 2*a1*mp)*(h + R) + a1*f1*(f*fp*R + ep*mp*r*(h + R)))^2)))/(2*a1*fp*(e1*fp*m1 + ep*f1*r)*(h + R)))
  )



samples <- 5000
values.sampled <- lapply(values, sample, samples)
results <- sapply(eqs, eval, envir = values.sampled)

values.sampled.df <- data.frame(values.sampled)
results <- data.frame(results)

values.sampled.df$sl <- c(1:samples)
results$sl <- c(1:samples)
df <- merge(results,values.sampled.df,by="sl")
dfraw <- df

df$A1[df$A1 <= 0] <- NA
df$A2[df$A2 <= 0] <- NA
df$A3[df$A3 <= 0] <- NA

df$B1[df$B1 <= 0] <- NA
df$B2[df$B2 <= 0] <- NA
df$B3[df$B3 <= 0] <- NA

df <- df[complete.cases(df), ]
df

이것은 100k 무작위 매개 변수 조합의 배치를 수행합니다. 결과가 발견되면 CSV에 기록합니다.

library(tidyverse)

batch_size <- 100000
batch_num <- 1

repeat {
  print(paste0("Processing batch (size = ", batch_size, "): ", batch_num))
  
  search_batch <- 
    matrix(
      runif(batch_size * 12, min = 0.1, max = 500),
      ncol = 12
    ) %>%
    as_tibble() %>%
    set_names(c("f1", "ep", "a1", "h", "e1", "m1", "mp", "f", "ab", "r", "fp", "R"))

  result <-
    search_batch %>%
    mutate(
      A1 = eval(eqs$A1, envir = .),
      A2 = eval(eqs$A2, envir = .),
      B1 = eval(eqs$B1, envir = .),
      B2 = eval(eqs$B2, envir = .),
      B3 = eval(eqs$B3, envir = .)
    ) %>%
    filter(
      A1 > 0,
      A2 > 0,
      B1 > 0,
      B2 > 0,
      B3 > 0
    )
  
  if (nrow(result) > 0) {
    print("Found result!")
    write_csv(result, "results.csv", append = TRUE)
    break
  }
  batch_num <- batch_num + 1
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관