1

テーブルのリストから始めます。各テーブルの列名は同じですが、行数は異なります。

filenames<- c('name1','name2','etc')
dat<-lapply(paste(filenames,'.csv',sep=""),read.csv)

次に、リスト内の各テーブルに名前を付けます。

names(dat)<-filenames

次に、データに対してさまざまなことを行う関数を作成します。

myfunc<- function (data) {results.table<-some.operations(data)}

「dat」の各テーブルに対して関数を繰り返し実行したい:

lapply(filenames, function(x) myfunc(dat[[x]],x))

これらの出力を検索できるように、「dat」の各テーブルに一意の名前を持つグローバル出力テーブルを作成する「myfunc」に入れる行を探しています。グローバル演算子 <<- がグローバル変数を作成することは理解していますが、名前を割り当てる方法がわかりません。私は試した

name<<-results.table

しかし、それは各結果テーブルをグローバル変数 'name' に割り当てるだけなので、最後に 1 つの出力 (関数が実行された最後のテーブルの結果) しかありません。私も試しました

paste(name)<<-results.table

substitute(name)<<-results.table

無駄に。どんなアドバイスでも大歓迎です!

4

1 に答える 1

4

lapply()リストの各要素に関数を適用し、結果のリストを返すことを既に意図しています。関数にそのリストのインデックスを付ける必要はありません。これはあなたが実際に得ていることだと思いますが、間違っている場合は修正してください:

# Define your function - no need for assignment here
myfunc<- function (data) {some.operations(data)}

# Apply your function to each element of dat - lapply returns a list with 
# an element of each result.  Instead of assigning each result globally,
# just assign this list of results
results <- lapply(dat, myfunc)

このようにして、同じ方法で操作を続けることができる別の優れた結果リストが得られます。このアプローチは R の場合により一般的です。グローバル環境に割り当てられたオブジェクトが本当に本当に必要な場合は、その理由をお知らせください。回答をより適切に調整できます。

于 2012-06-26T15:24:53.857 に答える