名前(1つのみ)のベクトルがあり、それを複数のオブジェクトに適用したいのですが、関数名は1つの引数(1つのオブジェクト)しか受け入れないため、名前を付けたいすべてのオブジェクトに対してプロセスを繰り返す必要があります。
names(object_1) <- namesvector
names(object_2) <- namesvector
names(object_3) <- namesvector
たった1つのステップでそれを行うことは可能ですか?
ありがとう!
名前(1つのみ)のベクトルがあり、それを複数のオブジェクトに適用したいのですが、関数名は1つの引数(1つのオブジェクト)しか受け入れないため、名前を付けたいすべてのオブジェクトに対してプロセスを繰り返す必要があります。
names(object_1) <- namesvector
names(object_2) <- namesvector
names(object_3) <- namesvector
たった1つのステップでそれを行うことは可能ですか?
ありがとう!
すべての数値ベクトルをリストに入れてlapply
から、代入でそれらを上書きすることができます。何かのようなもの:
# makes some vectors
obj_1 <- 1:10
obj_2 <- 1:10
obj_3 <- 1:10
name_vector <- LETTERS[1:10]
# now apply the names
lapply(list(obj_1,obj_2,obj_3), function(x) {names(x) <- name_vector; x})
楽しみのための別の方法:
lapply(list(object_1, object_2, object_3), structure, .Names = namesvector)
これらの答えはすべて、オブジェクトをリストに非難しています。オブジェクトに自由にアクセスできるようにしたい場合 (つまり、グローバル環境で)、別の解決策を次に示します。
サンプル オブジェクト:
object_1 <- runif(3)
object_2 <- runif(3)
object_3 <- runif(3)
応募したい名前:
namesvector <- letters[1:3]
名前を適用するためのいくつかのハッカー:
# Objects you want to combine.
items_n <- c("object_1", "object_2", "object_3")
# Make into a list with names of objects needed for promoting to global environment.
items <- structure(lapply(items_n, get), .Names = items_n)
# Add names to object elements.
named <- lapply(items, structure, .Names = namesvector)
# Promote to global environment.
list2env(named, .GlobalEnv)
今でも参照できます。
object_1
そしてその内容を取り戻します。items_n
たくさんのオブジェクトがある場合は、(結合するオブジェクトのリスト) を動的に作成することもできます(似たような名前を持っていると仮定します)。
items_n <- sapply(1:3, function(x) paste0("object_", x))