Pergunta

O Vectorize() e o apply() funções R muitas vezes pode ser usado para realizar o mesmo objetivo.Eu normalmente prefiro vectorizing uma função para facilitar a leitura razões, porque a principal função de chamada é relacionada à tarefa à mão, enquanto sapply não é.É útil, também, para Vectorize() quando eu vou estar usando essa vetorizados função várias vezes na minha R código.Por exemplo:

a <- 100
b <- 200
c <- 300
varnames <- c('a', 'b', 'c')

getv <- Vectorize(get)
getv(varnames)

vs

sapply(varnames, get)

No entanto, pelo menos ASSIM que eu raramente vejo exemplos com Vectorize() na solução, apenas apply() (ou um dos seus irmãos).Há questões de eficiência ou outras preocupações legítimas com Vectorize() que fazer apply() uma opção melhor?

Foi útil?

Solução

Vectorize é apenas um wrapper para mapply.Ele apenas cria uma mapply loop para qualquer função que você alimentá-lo.Assim, há muitas vezes mais coisas para fazer do que Vectorize() ele e o explícito *apply soluções acabam sendo computacionalmente equivalente ou talvez superior.

Também, para o seu exemplo, você já ouviu falar de mget, certo?

Outras dicas

Adicionar ao Thomas resposta.Talvez, também, a velocidade?

    # install.packages(c("microbenchmark", "stringr"), dependencies = TRUE)
require(microbenchmark)
require(stringr)

Vect <- function(x) { getv <- Vectorize(get); getv(x) }
sapp <- function(x) sapply(x, get)
mgett <- function(x) mget(x)
res <- microbenchmark(Vect(varnames), sapp(varnames), mget(varnames), times = 15)

## Print results:
print(res)
Unit: microseconds
           expr     min       lq  median       uq     max neval
 Vect(varnames) 106.752 110.3845 116.050 122.9030 246.934    15
 sapp(varnames)  31.731  33.8680  36.199  36.7810 100.712    15
 mget(varnames)   2.856   3.1930   3.732   4.1185  13.624    15


### Plot results:
boxplot(res)

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top