0

次のコードを短縮するために for ループを使用して、特定の操作をいくつかの (連続して名前が付けられた) 変数に適用したいと考えています。

for(i in 1:ncol(data)) {assign(paste('var', i, sep = '.'), my.fun(data[,i]))}

result.1 <- new.fun(var.1)
result.2 <- new.fun(var.2)
result.3 <- new.fun(var.3)
...

では、既存の変数 var.1、var.2、.... をどのように呼び出すのですか? ここにもペーストしようとしましたが、うまくいきませんでした。

4

2 に答える 2

7

簡単な答え: そうしないでください。代わりにリストを使用してください。

datadata.frame であると仮定します。

vars <- lapply(data, my.fun)
results <- lapply(vars, new.fun)
于 2012-04-24T13:40:16.070 に答える
6

@ Joshua の回答を拡張するには、データが既に var.1、var.2 などの変数にある場合、次のようなコードを使用してそれらをリストに結合できます。

mydata <- lapply( paste('var.', 1:10, sep=''), get )

また

mydata <- lapply( paste0('var.',1:10), get )

また

mydata <- lapply( sprintf('var.%d',1:10), get )

"var%03d"var001、var002 などの可変名がある場合に使用できる最後のものを使用できます。

次に、リスト内の用語に名前を付けたい場合(必要ありませんが、いいかもしれません)、次のようにするだけです:

names(mydata) <- sprintf('var.%d', 1:10)

リストの単一の要素にアクセスしたい場合は、mydata[[3]]またはでアクセスできますmydata$var.3。しかし、大きな利点は、またはまたは他のツールを使用して、リストの各要素に対して同じ関数を実行できるlapplyことsapplyですvapply。データを保存、コピー、削除などしたい場合は、心配するオブジェクトが 1 つだけです。別のループを必要とする代わりに。

将来のプロジェクトでは、個々の変数を最初に作成するよりも、データを直接リストに読み込むか作成することをお勧めします。

于 2012-04-24T15:50:17.493 に答える