1. ホーム
  2. r

[解決済み] FUN内のlapplyインデックス名へのアクセス

2022-04-22 17:21:45

質問

lapply()関数で、リストのインデックス名を取得する方法はありますか?

n = names(mylist)
lapply(mylist, function(list.elem) { cat("What is the name of this list element?\n" })

私は尋ねた 以前 の中でインデックス名を保持することは可能ですか? 戻り値 のリストがありますが、カスタム関数内で各要素名を取得する簡単な方法があるかどうか、まだわかりません。私は名前自体でlapplyを呼び出すことを避けたいので、むしろ関数のパラメータで名前を取得したいのです。

解決方法は?

残念ながら。 lapply は、渡したベクターの要素しか与えません。 通常の回避策は、ベクターそのものではなく、ベクターの名前かインデックスを渡すことです。

しかし、関数にはいつでも追加の引数を渡すことができるので、次のように動作することに注意してください。

x <- list(a=11,b=12,c=13) # Changed to list to address concerns in commments
lapply(seq_along(x), function(y, n, i) { paste(n[[i]], y[[i]]) }, y=x, n=names(x))

ここでは lapply のインデックスの上に x を渡すだけでなく x の名前と x . ご覧のように、関数の引数の順番は何でもいいのです - 。 lapply は、最初の引数に "要素" (ここではインデックス) を渡します。 ではなく を追加で指定します。この場合、私は yn のみであるため i 残り...

というのが出てきます。

[[1]]
[1] "a 11"

[[2]]
[1] "b 12"

[[3]]
[1] "c 13"

アップデイト もっと簡単な例ですが、結果は同じです。

lapply(seq_along(x), function(i) paste(names(x)[[i]], x[[i]]))

ここでは、この関数がグローバル変数 x を呼び出し、各呼び出しで名前を抽出します。