我是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。打印非常耗时。
谢谢, 萌
答案 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)
,它会提取您正在寻找的值(但是,如果不执行该功能旨在执行的那种重要性测试 - 您需要执行这些一种理智检查自己)。