Подтверждена следующая функция для Firefox 40, Chrome 44, Opera 31 и IE 11. Bowser используется для обнаружения браузера, также используется jQuery. - secUrl - это URL-адрес защищенной паролем области, из которой выходить из системы. - redirUrl - это URL-адрес области, не защищенной паролем (страница успеха выхода из системы). - вы можете увеличить таймер переадресации (в настоящее время 200 мс).
function logout(secUrl, redirUrl) {
if (bowser.msie) {
document.execCommand('ClearAuthenticationCache', 'false');
} else if (bowser.gecko) {
$.ajax({
async: false,
url: secUrl,
type: 'GET',
username: 'logout'
});
} else if (bowser.webkit) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", secUrl, true);
xmlhttp.setRequestHeader("Authorization", "Basic logout");
xmlhttp.send();
} else {
alert("Logging out automatically is unsupported for " + bowser.name
+ "\nYou must close the browser to log out.");
}
setTimeout(function () {
window.location.href = redirUrl;
}, 200);
}
Предполагая, что вход 3-х столбцов воспроизводится в примечании и используя окно ширины 3 для иллюстрации, определите функцию корреляции Cor
, которая принимает матрицу и вычисляет ее корреляционную матрицу, извлекающую нижнюю треугольную часть, чтобы исключить избыточность и добавить имена столбцов , Теперь используйте это с rollapplyr
:
library(xts)
Cor <- function(x) {
corr <- cor(x)
out <- as.data.frame.table(corr)[lower.tri(corr), ]
with(out, setNames(Freq, paste(Var1, Var2)))
}
rollapplyr(xx, 3, Cor, by.column = FALSE)
, давая:
DO0182U09B3.DO0182U09A3 DO0182U09C3.DO0182U09A3 DO0182U09C3.DO0182U09B3
2017-01-20 16:30:00 NA NA NA
2017-01-20 16:45:00 NA NA NA
2017-01-20 17:00:00 0.98573 -0.99613 -0.99671
2017-01-20 17:15:00 0.98629 0.95983 0.99297
2017-01-20 17:30:00 0.52664 0.47475 0.99820
2017-01-20 17:45:00 0.56204 0.50460 0.99769
Примечание: Вход xx
в воспроизводимой форме:
xx <- structure(c(-101.5, -101.32, -101.45, -100.91, -100.91, -100.97,
-103.37, -102.75, -103.3, -95.92, -103.04, -103.67, -103.86,
-104.22, -103.93, -99.22, -104.09, -104.12), .Dim = c(6L, 3L), .Dimnames = list(
NULL, c("DO0182U09A3", "DO0182U09B3", "DO0182U09C3")), index = structure(c(1484947800,
1484948700, 1484949600, 1484950500, 1484951400, 1484952300), tzone = "", tclass = c("POSIXct",
"POSIXt")), class = c("xts", "zoo"), .indexCLASS = c("POSIXct",
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "")
Вы можете использовать combn
для применения корреляции к каждой паре столбцов. Адаптация ответа, на который вы ссылались:
window <- 20
cors <- combn(colnames(wideRawXTS),2,
function(p) rollapply(wideRawXTS, window ,
function(x) cor(x[,p[1]],x[,p[2]]),
by.column=FALSE))
colnames(cors) <- combn(colnames(wideRawXTS),2, paste, collapse=".")
> colnames(cors) <- combn(names(wideRawDFscaled),2,paste,collapse=".") Error in
colnames & lt; - (
* tmp * , value = c("DO0182U09A3.DO0182U09B3", "DO0182U09A3.DO0182U09C3", : length of 'dimnames' [2] not equal to array extent
– TheGoat
9 March 2017 в 23:49
wideRawXTS
менял свойwideRawXTS
фрейм, с помощьюscale()
, теперь он называетсяwideRawDFScaled
. Когда я запускаюcor()
наwideRawDFScaled
, который является объектом XTS, и имеет размеры [1: 1343, 1:12] I см., что DO0182U09B3.DO0182U09A3 имеет корреляцию 0,2759166. Когда я запускаю свой код выше, я получаю тот же показатель для тех же двух переменных, но он повторяется для всех временных рядов. Я прикреплял изображения к OP, показывающие, о чем я говорю. Также должен ли массив возвращаться не 12x12x1343? Если у меня есть 12 vars, я не должен иметь 12x12 строк и cols? – TheGoat 9 March 2017 в 23:11x
в соответствии с вашим примером моим объектом zoowideRawDFscaled
, и я считаю, что он работает сейчас. С моим ограниченным опытом программирования определение функций меня смущает, я видел, как многие люди определяютfunction(x)
, я предполагаю, что мое определение функции должно бытьCor <- function(wideRawDFscaled) { corr <- cor(wideRawDFscaled)
– TheGoat 10 March 2017 в 01:12function(x) x
наfunction(y) y
ничего не делает. Оба они производят одинаковый выход для одного входа. – G. Grothendieck 10 March 2017 в 01:18xx
, чтобы четко отличить его от формального аргументаx
вCor
. Это ничего не меняет, но только для ясности в свете вашего комментария. – G. Grothendieck 10 March 2017 в 14:27