2016-09-21 13 views
-2

私はRが新ですので、これは簡単だと確信していますが、わかりません。以下の私のオブジェクトnの構造を見ることができます。私はnをループし、コロンの右側(例えば、 "57454470")からヌル以外の値を取り出し、それに関数を適用したいと思います。ここでリストからの値の取得(コロンの右側)

> str(n) 
List of 1 
$ :List of 10 
    ..$ 15793766: NULL 
    ..$ 15793767: chr "57454470" 
    ..$ 15793769: chr "123652395" 
    ..$ 15793770: chr "38098549" 
    ..$ 15793771: chr "56864789" 
    ..$ 15793776: chr "38722835" 
    ..$ 15793779: chr "37962343" 
    ..$ 15793784: chr "2100162920" 
    ..$ 15793787: chr "2099439832" 
    ..$ 15793791: chr "37992986" 
    ..- attr(*, "dim")= int 10 
    ..- attr(*, "dimnames")=List of 1 
    .. ..$ rmaddrs$ReportID: chr [1:10] "15793766" "15793767" "15793769" "15793770" ... 
    ..- attr(*, "call")= language by.data.frame(data = rmaddrs, INDICES = rmaddrs$ReportID, FUN = getValueFromXML) 
    ..- attr(*, "class")= chr "by" 

はdputの結果である:

dput(n[1]) 
    list(structure(list(`15793766` = NULL, `15793767` = "57454470", 
     `15793769` = "123652395", `15793770` = "38098549", `15793771` = "56864789", 
     `15793776` = "38722835", `15793779` = "37962343", `15793784` = "2100162920", 
     `15793787` = "2099439832", `15793791` = "37992986"), .Dim = 10L, .Dimnames = structure(list(
     `rmaddrs$ReportID` = c("15793766", "15793767", "15793769", 
     "15793770", "15793771", "15793776", "15793779", "15793784", 
     "15793787", "15793791")), .Names = "rmaddrs$ReportID"), call = by.data.frame(data = rmaddrs, 
     INDICES = rmaddrs$ReportID, FUN = getValueFromXML), class = "by")) 

UPDATE:私は、「印刷」のテストを削除し、私はより良いテストのために)(平均値を使用しようとしています。

sapply(n[1], function(x) mean(x, na.rm=TRUE)) 

次に、unlistとas.numericを使用しなければならなかったので、自分のカスタム関数を使用する必要があると思います。

+0

確かにあなたの機能は印刷されていません。 – Roland

+1

いいえ、私は「テストとして」言った。確かにあなたはもっと役に立つことができます。 – influent

+0

申し訳ありませんが、副作用として印刷されるため、印刷は優れたテスト機能ではありません。それがあなたを混乱させるかどうかは疑問からは分かりません。 – Roland

答えて

1

sapplyは、すべてを印刷しますが、(割り当てられていないので)オブジェクトも返します。返されたオブジェクトの印刷を回避するには、invisible()にラップまたは

invisible(sapply(n[1], print)) 
xx = sapply(n[1], print) 

それを割り当てることができます(注:この印刷はあなたがコンソールに1 + 1を入力すると、結果の2が印刷されますちょうどのようなものです。しかし、あなたが入力した場合。 x = 1 + 1何も表示されません。sapplyを簡略化して匿名機能を省略しましたが、問題はありません)

+0

これは、私の質問の中核をなすのに役立ちますが、これはコロンの右側(たとえばn [[1]])の値を抽出する方法です。 – influent

+1

さて、どういう意味なのか分かりますが、n [[1]]は10のリストなので混乱しています。おそらく 'n [ [1]] [[1]] '、' n [[1]] [[2]]など?これらの個々の要素はすべて、名前と値を持っています。「*コロンの右側*」は、値を名前なしで印刷することを意味しますか? 'print(unname(n [[1]]))'、 'print(unname(n [[1]] [[2]])'? (1)データのサンプルを 'dput()'と再現可能に共有し、(2)そのサンプルに対して、あなたの出力を明示的に表示できますか? – Gregor

+0

私はそれをテストしたと思った。私はそれが可能かどうかを確かめるだろう。私のカスタム機能を使用する。 – influent

関連する問題