名前付きリストを作成するために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`
_
これはかなり不自然な解決策のように見えますが、それ以外の方法はわかりません。私が持っている問題は次のとおりです。
dummyList
は変更されず、dummyList
の呼び出し後は空のリストですが、mapply
を作成する必要があります。
数値ベクトルc(1, 2)
がリストに変換されない場合、mapply
の呼び出しの結果は、doubleの名前付きベクトルになります。
問題2を回避するには、2つのベクトルでmapply
を呼び出してから、結果で_as.list
_を呼び出すだけですが、値を持つリストを直接作成する方法があるはずですベクトルで。
setNames()
を使用できます
setNames(as.list(c(1, 2)), c("foo", "bar"))
(リスト用)または
setNames(c(1, 2), c("foo", "bar"))
(ベクターの場合)
なぜあなたがこれをしたいのかについてのベンの困惑と彼の推薦を共有します。
好奇心のために、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論理;最初の...引数に名前がある場合は名前を使用します。それが文字ベクトルの場合は、その文字ベクトルを名前として使用します。