Closed alexhubbe closed 10 years ago
Várias das funções de comparação de matrizes agora são "genéricas", ou seja, elas não são efetivamente as funções que fazem a conta. Em vez disso, elas chamam uma outra função, chamada um "método", que contem o código a ser executado. Uma função genérica pode ter vários métodos, dependendo do tipo da variável de entrada. Vc pode ver o código da função genérica digitando o nome dela sem parenteses:
> KrzCor
function (cov.x, cov.y, ...)
UseMethod("KrzCor")
<environment: namespace:Morphometrics>
(é só isso mesmo o código... hehehehe)
No caso das funções de comparação, existem dois métodos: um padrão e um para listas. Você pode verificar isso diretamente usando a função methods:
> methods(KrzCor)
[1] KrzCor.default* KrzCor.list*
Non-visible functions are asterisked
Note que essas funções são "não visíveis", ou seja, não podem ser acessadas diretamente pelo usuário. Somente a função genérica pode ser usada, e qual método vai ser invocado fica por conta do R.
Se você quiser acessar o código de algum método que não seja visível, precisa de um função especifica pra isso, a getS3method do pacote uitls:
> library(utils)
> getS3method("KrzCor", "default")
function (cov.x, cov.y, ret.dim = NULL, ...)
{
if (is.null(ret.dim))
ret.dim = round(dim(cov.x)[1]/2 - 1)
EigenVectors <- function(x) return(eigen(x)$vectors[, 1:ret.dim])
A <- EigenVectors(cov.x)
B <- EigenVectors(cov.y)
S <- t(A) %*% B %*% t(B) %*% A
SL <- sum(eigen(S)$values)/ret.dim
return(SL)
}
<environment: namespace:Morphometrics>
e, para listas:
> getS3method("KrzCor", "list")
function (cov.x, cov.y = NULL, ret.dim = NULL, repeat.vector = NULL,
num.cores = 1, ...)
{
if (is.null(cov.y)) {
out <- ComparisonMap(cov.x, function(x, y) return(c(KrzCor.default(x,
y, ret.dim), NA)), repeat.vector = repeat.vector,
num.cores = num.cores)
out <- out[[1]]
}
else {
out <- SingleComparisonMap(cov.x, cov.y, function(x,
y) return(c(KrzCor.default(x, y, ret.dim), NA)),
num.cores = num.cores)
out <- out[, -length(out)]
}
return(out)
}
<environment: namespace:Morphometrics>
hummmm... tendi!
Caro,
olha eu enchendo novamente!!
quando vc carrega o Morphometrics no RStudio, aparece tanto KrzCor quanto KrzCor.default e KrzProjection e KrzProjection.default, mas os que são .default não funcionam (Error: could not find function "KrzCor.default") e o help deles é igual... quando vc entra em https://github.com/lem-usp/Morphometrics/tree/master/R as opções .default não aparecem...