3

以下に、私が取り組んでいるいくつかのコードのスニペットを示します。私は文字列をテーブルとして正常に読み取っています。median()関数を使用したいテーブルのサブセットがいくつかあります。私が行った調査と私自身の経験から、median()にはdata.frameまたはdata.frameのサブセットの動作が定義されていません。そこで、問題を定義された動作に適合させたいと思い、目的のサブセットをベクトルにキャストしようとしました。ただし、as.vectorを使用して目的のサブセットをキャストした後でも、data.frameがあります。これについて中央値を呼び出そうとすると、「引数は数値でも論理でもありません。NAを返します」というメッセージが表示されます。

私はこれをかなり自分でプレイし、ここや他の場所で情報を見つけようとしました。注として、私はこのスレッドでaccpetedソリューションにリストされている方法を試しました。Rdata.frame列をベクトルに変換するRフレンドリーな方法ですか?そして私が今持っているのと同じ結果を達成しました。これをどのように達成するかはあまり気にしません。他の方法をお気軽にご提案ください。

お時間をいただきありがとうございます。

for(i in 1:length(text_array)){
    temp= read.table(textConnection(text_array[i]), sep="\t",row.names=NULL, header= FALSE,  fill=TRUE) 
    value=""
    #we are now going to process temp and add it
    cur_DS=coll_data_sets[i]
    #median is the value that we are going to insert into the result array.
    #currently the logic behind it is not implemented.
    #the value will be the median of state1 divided by the median of state2.
    t_states=vector(length=ncol(temp))
    for(j in 1:ncol(temp)){
        t_states[j]=toString(temp[2,j])

    }
    t_states=(unique(t_states))
    #this logic is current is set to reject data from more than one state.
    # It will also reject anything that appears to lack state data.
    if(length(t_states) !=  2){
        value=NA
    }else{
        s1_expr=as.vector(x=(temp[3, temp[2,]==t_states[1]]))
        s2_expr=as.vector(x=temp[3, temp[2,]==t_states[2]])
        print(class(s1_expr))
    #   med1= (median(s1_expr))
    #   med2= (median(s2_expr))
    #   if(is.na(med1[1]) || is.na(med2[1])){
    #       value=-1
        }#else{
    #       value=med1[1]/med2[1]
    #       print(value)
    #   }

    }
[1] "data.frame"
[1] "data.frame"
[1] "data.frame"

'temp'の値の例を次に示します。

         V1        V2          V3          V4
1 GSM506899 GSM506900   GSM506901   GSM506902
2 wild type wild type Zbtb20 null Zbtb20 null
3      99.3     98.24        66.2      102.42
4      55.8     20.11        22.9       16.98
5     159.6     63.46       102.5       67.17
6       166     54.73         215       49.46
4

1 に答える 1

13

データフレームはリストです。データの1行だけを選択しても、それはリストのままです。

試してみてくださいunlist。(もちろん、「行」のすべての値が数値であると仮定します。そうでない場合は、より大きな問題が発生します。)

于 2012-12-17T23:22:27.077 に答える