2017-06-18 3 views
0

私はRプログラミングとプログラミング全般については無知ですが、私には(私にとっては)同様の問題に遭遇した2つのコードがあります。ここで行く...Rの前の関数の出力から新しい関数を作成するには?

(A)

私は現在、患者、試験番号、およびその他の情報のレコードを返す関数を持っています。これは次のようになります。

 ID trial  start finish  mark  mean number 
903 A34 19  90910 18775077  8236 -0.0197 1.972876 
904 A34 19 18782377 23089165  2343 0.0374 2.052525 
905 A34 19 23093018 43203507 10267 -0.0162 1.977668 
906 A34 19 43203990 43447468  93 0.2138 2.319478 
907 A34 19 43447802 43663369  112 -0.0355 1.951387 
908 A34 19 43663624 43834506  80 -0.5385 1.376973 
909 A34 19 43834848 59097854  8655 -0.0095 1.986873 

以下は私が書いたコードです。

getRS <- function(CNA, samples = NULL, trial = NULL){ race <- racing.summary(subset(CNA, samplelist = samples, triallist = trial)) race$number <- (2^race$mean)*2 return(race) }

単純な算術演算を行うための新しい機能で、この出力を使用することが可能である場合、私は疑問に思って。私は、 '長さ'を作成するために '開始'から 'フィニッシュ'を引き、上からすべての手段で新しい '平均'を作成し、 'マーク'を表示しないで 'まったく。

このような出力:

ID trial  max.length   mean max.number 
A34  19  20110489 -0.05260000  2.3194777 

AND/OR

(B)

Iはすでに計算されたデータを有する全ての患者のデータフレームを作成する別の機能を有しています。 、私はのようにルックアップしたいと思いますどのIDとその裁判を指定すると関数を作成したいと思います。これにより

 ID trial max.length   mean  max.number 
1 A22  1  96637812 -1.648909e-01  2.6989533 
25 A23  1  101363101 -6.275455e-02  2.2468441 
49 A24  1  72598875 -5.878000e-02  2.8204004 
73 A25  1  112628591 -3.346917e-01  2.0675182 
97 A26  1  55490417 7.621429e-02  2.4512200 
121 A28  1  130879821 -4.218571e-02  2.0679481 
145 A29  1  72590096 -3.093417e-01  2.3450196 
169 A30  1  32642030 4.242500e-02  2.6375528 
193 A32  1  34350731 -8.188372e-02  2.1149155 
217 A33  1  77537981 -1.305833e-01  2.1125713 

getSum <- function(){ 
    race_mean <- as.data.frame(df %>% group_by(ID, trial) %>% summarise(mean = mean(mean))) 
    race_length <- as.data.frame(df %>% group_by(ID,trial) %>% summarise(max.length = max(end - start))) 
    seg_number <- as.data.frame(df %>% group_by(ID,trial) %>% summarise(max.number = max(number))) 
    race_m_l_merge <- as.data.frame(merge(x = race_length, y = race_mean)) 
    race_m_l_n_merge <- as.data.frame(merge(x = race_m_l_merge, y = race_number)) 
    ordered_summary <- as.data.frame(race_m_l_n_merge[order(race_m_l_n_merge$trial),]) 
    View(ordered_summary) 
} 

このような出力を与える:私はこのコードを使用しましたso:Function("A22",1)

未来のための私のRスクリプトが今後の努力のために任意に機能することを期待していますので、私の質問A、B、またはその両方でどんな助けも大いに評価されるでしょう!有用なウェブサイトへのリンクについての提案もあります。 :)

答えて

1

すでに関数getRSgetSumを定義していれば、それらを新しい関数の中で呼び出すことができます。もしそれはあなたがさらに操作できるオブジェクトを返すよう

Uouはちょうど、View(ordered_summary)からgetSumreturn(ordered_summary)または単にordered_summaryを含む行を変更する必要があります。

lookup_function <- function(data_lookup, id_lookup, trial_lookup) { 
    data_df <- getRS(CNA = data_lookup) 
    summary_df <- getSum(df = data_df) 
    subset(x = results_df, subset = (ID == id_lookup & trial == trial_lookup)) 
} 

この機能は、意識があれば簡潔に記述できます。

lookup_function <- function(data_lookup, id_lookup, trial_lookup) { 
    subset(x = getSum(getRS(data_lookup)), subset = (ID == id_lookup & trial == trial_lookup)) 
} 

それとも、あなたは、3つの異なる機能を持ってしたくない場合は、getRSと自身の内部で定義されたgetSumを持つ関数を作成することができます。

lookup_function <- function(data_lookup, id_lookup, trial_lookup) { 
    data_df <- getRS(CNA = data_lookup) 
    summary_df <- getSum(df = data_df) 
    subset(x = results_df, subset = (ID == id_lookup & trial == trial_lookup)) 
} 

lookup_function <- function(data_lookup, id_lookup, trial_lookup) { 
    getRS <- function(CNA, samples = NULL, trial = NULL){ 
    race <- 
     racing.summary(subset(CNA, samplelist = samples, triallist = trial)) 
    race$number <- 
     (2^race$mean) * 2 

    race 
    } 

    getSum <- function(df) { 
    unordered_summary <- 
     df %>% 
     group_by(ID, trial) %>% 
     summarise(mean = mean(mean), 
       max.length = max(end - start), 
       max.number = max(number)) %>% 
     data.frame() 

    ordered_summary <- 
     data.frame(unordered_summary[order(unordered_summary$trial), ]) 

    ordered_summary 
    } 

    data_df <- getRS(CNA = data_lookup) 

    summary_df <- getSum(df = data_df) 

    subset(x = results_df, subset = (ID == id_lookup & trial == trial_lookup)) 
} 

私はsummarize 3回を呼び出すための理由を見ていないように私の代わりに単一の時間で、getSumのコードを編集しました。当然のことながら、あなた自身の機能を使用することができます。

+0

ありがとうございました!私はこれを行う時間を取って、本当に私が持っている現在のコードを編集することの提案が好きでありがとう! –

関連する問題