将类型为'double'的所有函数强制参数设为逻辑

时间:2019-04-04 16:02:46

标签: r

我在项目中使用R,但是下面的代码不起作用...

sample_size_function <- function(d) {
  if (0.82 + d >=1 ) {
    function_p_1 <- 1
  } else {
    function_p_1 <- 0.82 + d
  }
  if (0.82 - d <= 0) {
    function_p_2 <- 0
  } else {
    function_p_2 <- 0.82 - d
  }
  sequence_p_1 <- seq(from = function_p_1, to = 1, by = 0.0001)
  sequence_p_2 <- seq(from = function_p_2, to = 0, by = -0.0001)
  c_power_matrix_1 <- matrix(0, nrow = 10000-52, ncol = 
length(sequence_p_1))
  c_power_matrix_2 <- matrix(0, nrow = 10000-52, ncol = 
length(sequence_p_2))
  for (i in 53:10000) {
    c_cr_left <- qbinom(0.025, i, 0.82)
    c_cr_right <- qbinom(0.975, i, 0.82)
    for (j in 1:length(sequence_p_1)) {
      c_power_matrix_1[i-52, j] <- pbinom(c_cr_left-1, i, sequence_p_1[j]) 
+ (1-pbinom(c_cr_right, i, sequence_p_1[j]))
    }
    if (all(c_power_matrix_1[i-52, ]) > 0.7) {
      c_sample_size_1 <- i
      break
    }
  }
  for (n in 53:10000) {
    c_cr_left <- qbinom(0.025, i, 0.82)
    c_cr_right <- qbinom(0.975, i, 0.82)
    for (k in 1:length(sequence_p_2)) {
      c_power_matrix_2[n-52, k] <- pbinom(c_cr_left-1, n, sequence_p_2[j]) + (1-pbinom(c_cr_right, n, sequence_p_2[k]))
}
    if (all(c_power_matrix_2[n-52, ] > 0.7)) {
      c_sample_size_2 <- n
      break
    }
  }
  result <- max(c_sample_size_1, c_sample_size_2)
  return(result)
}

当我运行这段代码时,我收到了一些警告,但没有给出我期望的答案。 对于d = 0.1,

> sample_size_function(0.1)
[1] 53
Warning message:
In all(c_power_matrix_1[i - 52, ]) :
coercing argument of type 'double' to logical

但是我希望它能给

[1]111

因为下面给出的111应该与我将d = 0.1时的结果相同

true_p_1 <- seq(from = 0.92, to = 1, by = 0.0001)
true_p_2 <- seq(from = 0.72, to = 0, by = -0.0001)
power_matrix_1 <- matrix(0, nrow = 10000-52, ncol = length(true_p_1))
power_matrix_2 <- matrix(0, nrow = 10000-52, ncol = length(true_p_2))
for (i in 53:10000) {
  cr_left <- qbinom(0.025, i, 0.82)
  cr_right <- qbinom(0.975, i, 0.82)
  for (j in 1:length(true_p_1)) {
    power_matrix_1[i-52, j] <- pbinom(cr_left-1, i, true_p_1[j]) + (1- 
pbinom(cr_right, i, true_p_1[j]))
  }
  if (all(power_matrix_1[i-52, ] > 0.7)) {
    sample_size_b_1 <- i
    break
  }
}
for (n in 53:10000) {
  cr_left <- qbinom(0.025, n, 0.82)
  cr_right <- qbinom(0.975, n, 0.82)  
  for (k in 1:length(true_p_2)) {
    power_matrix_2[n-52, k] <- pbinom(cr_left-1, n, true_p_2[k]) + (1- 
pbinom(cr_right, n, true_p_2[k]))
  }
  if (all(power_matrix_2[n-52, ] > 0.7)) {
    sample_size_b_2 <- n
    break
  }
}
max(sample_size_b_1, sample_size_b_2)

上面给出了

[1]111

我是R的新手,我不知道为什么我的功能不起作用...请帮助我!谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您只是在第3个if中放错了对硫磷。 像

一样进行修改
if (all(c_power_matrix_1[i-52, ] > 0.7)) {
  c_sample_size_1 <- i
  break
}