12

次のようなRリストがあるとします。

> summary(data.list)
                                 Length Class      Mode
aug9104AP                        18     data.frame list
Aug17-10_acon_7pt_dil_series_01  18     data.frame list
Aug17-10_Picro_7pt_dil_series_01 18     data.frame list
Aug17-10_PTZ_7pt_dil_series_01   18     data.frame list
Aug17-10_Verat_7pt_dil_series_01 18     data.frame list

を使用してリスト内の各data.frameを処理したいのですが、data.frameと一緒にl_ply名前(例:aug9104AP)を処理関数に渡す必要もあります。何かのようなもの:

l_ply(data.list,function(df,...) {

    cli.name<- arg_to_access_current_list_item_name

    #make plots with df, use cli.name in plot titles
    #save results in a file called cli.name

  }, arg_to_access_current_list_item_name
)

どうあるべきarg_to_access_current_list_item_nameですか?

4

3 に答える 3

11

名前から始めて、それらを使用して興味のあるビットを抽出するのが最も簡単です。

l_ply(names(data.list),function(name,...) {
  df <- data.list[[name]]
)

m_ply名前とデータの両方を渡すために使用することもできます。

m_ply(cbind(names(data.list), data.list), function(name, df, ...) {
   ...
}
于 2010-08-25T00:28:30.817 に答える
3

それらを1つずつ渡す場合は、deparse(substitute(arg))を使用できます。例:

test <- function(x){
       y <- deparse(substitute(x))
       print(y)
       print(x)
 }

 var <- c("one","two","three")
 test(var)
[1] "var"
[1] "one"   "two"   "three"

l_plyの場合、リスト自体に属性を追加するために頼る必要があります。例:

for(i in 1:length(data.list)){
    attr(data.list[[i]],"name") <- names(data.list)[i]
}

次に、attrを使用できます:

cli <- attr(x,"name")

乾杯

于 2010-08-23T22:06:23.320 に答える
3

Jorisの答えは、これを行うための最もクリーンな方法です。属性を抽出する関数を追加します。

for(ename in names(data.list)) {
    attr(data.list[[ename]], "ename") <- ename
}
ename <- function(x) attr(x, "ename") # states for element name

したがって、次のように使用します。

l_ply(data.list, function(df, ...) {
    cli.name<- ename(df)
    # make plots, save results using cli.name
})

私は通常この方法を使用します:

l_ply(names(data.list), function(cli.name, df=data.list[[cli.name]], ...) {
    # make plots, save results using cli.name
})

名前を繰り返し、data.frameそれらを使用して元のリストから抽出します。


通知のためだけにハックがあります。フレームが乱雑になり、制御が難しいため、お勧めしません。実際にはループ
であるファクトを使用して、関数の内部から実際のステップを抽出できます。正しい環境で使用できます。llplyforget

l_ply(data.list, function(df, ...) {
    cli.name<- names(data.list)[get("i",parent.frame())]
    # make plots, save results using cli.name
})
于 2010-08-24T05:12:03.260 に答える