4

私は数週間前にRを手にした初心者で、apply家族を学ぼうとしています。使い方がわからずlapply、気が狂います。はい、私は一言で言えばRとRクック?lapplyブックを含むいくつかの本を調べましたが、それでも私が何を間違っているのか理解できません。

lapply(X = c("ggplot2", "gtable", "grid"), library)
## Error: 'package' must be of length 1
lapply(X = c("ggplot2", "gtable", "grid"), FUN = function(x) library(x))
## Error: there is no package called 'x'
lapply(X = c("ggplot2", "gtable", "grid"), FUN = library)
## Error: 'package' must be of length 1
x = c("ggplot2", "gtable", "grid")
lapply(x, library)
## Error: 'package' must be of length 1
lapply(x, FUN = function(x) library(x))
## Error: there is no package called 'x'
4

2 に答える 2

10

あなたlapply()自身には何も悪いことはありませんが、問題はlibrary()少し特別な方法でその引数を評価することです。

これはあなたが使用する必要があることを意味します

library(pkg.name, character.only=TRUE)

これは、ヘルプではかなりあいまいです?library


packageは、character.onlyがFALSE(デフォルト)またはTRUEのどちらであるかに応じて、名前またはリテラル文字列、または文字列として指定されたパッケージの名前を支援します。

これが意味するのは、に文字列を指定する場合はlibrary()、TRUEに設定する必要があるということです。character.only

だから、これを試してみてください:

lapply(x, library, character.only=TRUE)

require()次に、の代わりに呼び出して、結果を次のように単純化することをお勧めしますlibrary()sapply

sapply(x, require, character.only=TRUE)
ggplot2  gtable    grid 
   TRUE    TRUE    TRUE 

違いはrequire()、パッケージが正常にロードされたかどうかを示す単一の論理値を返すことです。

于 2013-03-07T14:31:51.953 に答える
1

たとえば、これを試してください:

 lapply(X = c("ggplot2", "gtable", "grid"), library,character.only =T)

見る?library

package、help character.only が FALSE (デフォルト) か TRUE かによって、名前またはリテラル文字列、または文字列として与えられるパッケージの名前。

たとえば、次のようにします。

lapply(X = c("ggplot2", "gtable", "grid"), FUN = function(x) library(x))
## Error: there is no package called 'x'

library x を引数として取得し、name = 'x' のパッケージを読み込もうとするため、エラーが発生します。

于 2013-03-07T14:29:37.850 に答える