如何将函数的屏幕结果分配给R中的变量

时间:2017-11-16 22:46:22

标签: r

我是R的新人。我正在使用名为" CircStat"的图书馆。该库中的函数在屏幕上打印结果,例如

rao.spacing(angles)

给出

Rao's Spacing Test of Uniformity 

Test Statistic = 155.9671 

0.001 < P-value < 0.01

其中&#34; rao.spacing是函数,&#34;角度&#34;是一个以rad为单位的几个角度的列表。

我需要传递输出,特别是&#34; 155.9671&#34;一个变量在我的代码的其他部分使用它,我该怎么做?

我更喜欢不写入文件并从中读取,因为我需要使用该函数超过50,000。打印非常耗时。

谢谢, 萌

1 个答案:

答案 0 :(得分:0)

显然,CircStats的作者认为函数不需要返回值 - rao.spacing()旨在返回NULL(注意rao.spacing()的帮助,VALUE部分很简单“NULL “)。

但是,如果你检查函数本身(在Rstudio中点击F2,或者输入没有任何括号或参数的函数),通过创建自己的版本来破解返回值非常简单:

rao2  <- function (x, alpha = 0, rad = TRUE) 
{
  rao.table <- NULL
  data(rao.table, package = "CircStats", envir = sys.frame(which = sys.nframe()))
  if (rad == TRUE) 
    x <- deg(x)
  x <- sort(x%%360)
  n <- length(x)
  spacings <- c(diff(x), x[1] - x[n] + 360)
  U <- 1/2 * sum(abs(spacings - 360/n))
  if (n < 4) 
    stop("Sample size too small")
  if (n <= 30) 
    table.row <- n - 3
  else if (n <= 32) 
    table.row <- 27
  else if (n <= 37) 
    table.row <- 28
  else if (n <= 42) 
    table.row <- 29
  else if (n <= 47) 
    table.row <- 30
  else if (n <= 62) 
    table.row <- 31
  else if (n <= 87) 
    table.row <- 32
  else if (n <= 125) 
    table.row <- 33
  else if (n <= 175) 
    table.row <- 34
  else if (n <= 250) 
    table.row <- 35
  else if (n <= 350) 
    table.row <- 36
  else if (n <= 450) 
    table.row <- 37
  else if (n <= 550) 
    table.row <- 38
  else if (n <= 650) 
    table.row <- 39
  else if (n <= 750) 
    table.row <- 40
  else if (n <= 850) 
    table.row <- 41
  else if (n <= 950) 
    table.row <- 42
  else table.row <- 43
  if (alpha == 0) {
    cat("\n")
    cat("       Rao's Spacing Test of Uniformity", "\n", 
        "\n")
    cat("Test Statistic =", round(U, 5), "\n")
    if (U > rao.table[table.row, 1]) 
      cat("P-value < 0.001", "\n", "\n")
    else if (U > rao.table[table.row, 2]) 
      cat("0.001 < P-value < 0.01", "\n", "\n")
    else if (U > rao.table[table.row, 3]) 
      cat("0.01 < P-value < 0.05", "\n", "\n")
    else if (U > rao.table[table.row, 4]) 
      cat("0.05 < P-value < 0.10", "\n", "\n")
    else cat("P-value > 0.10", "\n", "\n")
  }
  else {
    cat("\n")
    cat("       Rao's Spacing Test of Uniformity", "\n", 
        "\n")
    cat("Test Statistic =", round(U, 5), "\n")
    if (sum(alpha == c(0.001, 0.01, 0.05, 0.1)) == 0) 
      stop("Invalid significance level")
    table.col <- (1:4)[alpha == c(0.001, 0.01, 0.05, 0.1)]
    critical <- rao.table[table.row, table.col]
    cat("Level", alpha, "critical value =", critical, "\n")
    if (U > critical) 
      cat("Reject null hypothesis of uniformity", "\n", 
          "\n")
    else cat("Do not reject null hypothesis of uniformity", 
             "\n", "\n")
  }


  return(U)
}

myvalue  <- rao2(angles)

注意最后的return(U),它会提取您正在寻找的值(但是,如果不执行该功能旨在执行的那种重要性测试 - 您需要执行这些一种理智检查自己)。