我是 R 新手。我正在使用一个名为“CircStat”的库。例如,该库中的函数在屏幕上打印结果
rao.spacing(angles)
给
Rao's Spacing Test of Uniformity
Test Statistic = 155.9671
0.001 < P-value < 0.01
其中“rao.spacing”是函数,“angles”是几个以弧度为单位的角度的列表。
我需要将输出(特别是“155.9671”)传递给变量以在代码的其他部分使用它,我该怎么做?
我更喜欢不写入文件并从中读取,因为我需要使用该功能超过 50,000。而且打印会非常耗时。
谢谢,萌
显然,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)
最后的 ,它会踢出您正在寻找的值(尽管如此,没有执行该函数旨在执行的那种重要性测试 - 您需要自己执行那些类型的健全性检查)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句