質問

Vectorize() そしてその apply() で機能する R 多くの場合、同じ目的を達成するために使用できます。私は通常、読みやすさの理由から関数をベクトル化することを好みます。これは、メインの呼び出し関数が当面のタスクに関連しているためです。 sapply ではありません。また、 Vectorize() R コードでそのベクトル化された関数を複数回使用するとき。例えば:

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

getv <- Vectorize(get)
getv(varnames)

sapply(varnames, get)

ただし、少なくとも SO では、次のような例はほとんど見られません。 Vectorize() ソリューションでは、のみ apply() (またはその兄弟のいずれか)。効率の問題やその他の正当な懸念事項はありますか? Vectorize() そのメイク apply() もっと良い選択肢はありますか?

役に立ちましたか?

解決

Vectorize の単なるラッパーです mapply. 。それはあなたを構築するだけです mapply 与えた関数のループ。したがって、それよりも簡単にできることがよくあります。 Vectorize() それと明示的なもの *apply 最終的に、ソリューションは計算的に同等か、場合によっては優れたものになります。

また、具体的な例として、聞いたことがあるのは、 mget, 、 右?

他のヒント

Thomasの答えに追加する。たぶんスピード?

    # 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 IMART Description

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top