55

2 つのベクトルで mapply を使用して名前付きリストを作成する方法はありますか? 最初のベクトルは型characterで、リストに使用される名前を含み、2 番目のベクトルには値が含まれます。

これまでのところ、私が持っている唯一の解決策は次のとおりです。

> dummyList = list()
> addToList <- function(name, value) {
+ dummyList[[name]] <- value
+ }
> mapply(addToList, c("foo", "bar"), as.list(c(1, 2))
$foo
`1`

$bar
`2`

これはかなり不自然な解決策のように思えますが、それ以外の方法がわかりません。私が抱えている問題は次のとおりです。

  1. dummyListの呼び出し後は変更されずdummyList、空のリストですが、 を作成する必要がありmapplyます。

  2. 数値ベクトルc(1, 2)がリストに変換されない場合、 への呼び出しの結果はmapplydouble の名前付きベクトルになります。

問題 2 を回避するには、いつでもmapply2 つのベクトルを呼び出しas.listてから結果を呼び出すことができますが、値がベクトルに含まれるリストを直接作成する方法が必要なようです。

4

3 に答える 3

104

使用できますsetNames()

setNames(as.list(c(1, 2)), c("foo", "bar"))

(リストの場合)または

setNames(c(1, 2), c("foo", "bar"))

(ベクトルの場合)

于 2013-07-24T19:08:01.973 に答える
9

なぜあなたがこれをやりたがるのかについての Ben の困惑と、彼の推奨事項を共有します。

好奇心のために、mapplyこれを可能にする一種の「隠された」機能があります。

x <- letters[1:2]
y <- 1:2
mapply(function(x,y) { y }, x, y, SIMPLIFY = FALSE,USE.NAMES = TRUE)
$a
[1] 1

$b
[1] 2

のドキュメントにUSE.NAMESは次のように記載されていることに注意してください。

USE.NAMES 論理; 最初の ... 引数に名前がある場合は名前を使用し、文字ベクトルの場合はその文字ベクトルを名前として使用します。

于 2013-07-24T19:13:30.173 に答える