2014-11-20 85 views
1

我有以下代碼:轉換列表變量串

 #subsets of different criteria 

    IAEA_C2_NoStdCondition = subset(SelectedRNumberOnlyOutlierRejectionOrdered, 
            Job..R == "14047/2" 
            & Weight_Initial > weight 
            ) 

     IAEA_C2_EAstd = subset(SelectedRNumberOnlyOutlierRejectionOrdered, 
          Job..R == "14047/2" 
          & Weight_Initial > weight 
          & AMS_Timetable_From_Results..Standard_Prep_Type == "EA" 
          ) 

     IAEA_C2_STstd = subset(SelectedRNumberOnlyOutlierRejectionOrdered, 
          Job..R == "14047/2" 
          & Weight_Initial > weight 
          & AMS_Timetable_From_Results..Standard_Prep_Type == "ST" 
          ) 

     IAEA_C2_Bothstd = subset(SelectedRNumberOnlyOutlierRejectionOrdered, 
           Job..R == "14047/2" 
           & Weight_Initial > weight 
           & AMS_Timetable_From_Results..Standard_Prep_Type == "Both" 
           ) 

R = 4   

for(i in 1:R) { 
    RNumberList = NULL 
    #make sure that names of the used subsets are listed in the 'list' 
    RNumberList = list(IAEA_C2_NoStdCondition, 
        IAEA_C2_EAstd, 
        IAEA_C2_STstd, 
        IAEA_C2_Bothstd 
        ) 

    LoopVariable = RNumberList[[i]] 
    #now I do different calculations with LoopVariable and so on 

    #convert list Variable to string for later usage in filename as unique identifier!! 
    SubNameStr = deparse(substitute(RNumberList[[i]])) 

    print(SubNameStr) 
    # I get "RNumberList[[i]]" as string, but want for i=1 --> [1] "IAEA_C2_NoStdCondition" and for i=2 --> [1] "IAEA_C2_EAstd" and so on 
    [1] "RNumberList[[i]]" 

我做一個位子的設置首先,然後我開始for循環從i到R,其中R是爲子集的我把量在我的list()。然後我打電話給RNumberList[[i]],將它轉換成LoopVariable並做一些計算(工作都很好),然後我想將used subset Variable name in my list()轉換爲一個字符串,這樣這個字符串可以用作我的導出文件名中的唯一標識符!

+0

類SelectedRNumberOnlyOutlierRejectionOrdered的?矩陣?數據幀? – LyzandeR 2014-11-20 23:19:25

+0

這是一個數據幀。 – Johannes 2014-11-20 23:27:25

回答

0

首先:

RNumberList = NULL #you don't need this 
    RNumberList = list(IAEA_C2_NoStdCondition, #this needs to be before the loop otherwise 
        IAEA_C2_EAstd,   #you just overwrite it again and again 
        IAEA_C2_STstd,   #which is inefficient 
        IAEA_C2_Bothstd 
        ) 

現在:

改變以前到:

RNumberList = list(IAEA_C2_NoStdCondition=IAEA_C2_NoStdCondition, 
        IAEA_C2_EAstd=IAEA_C2_EAstd, 
        IAEA_C2_STstd=IAEA_C2_STstd, 
        IAEA_C2_Bothstd=IAEA_C2_Bothstd 
) 

和:

SubNameStr = deparse(substitute(RNumberList[[i]])) 

到:

SubNameStr = names(RNumberList)[i] 

就是這樣!

我將添加一個小例子:

IAEA_C2_NoStdCondition <- data.frame(a=runif(1:100)) 
IAEA_C2_EAstd <- data.frame(b=runif(1:100)) 
IAEA_C2_STstd <- data.frame(c=runif(1:100)) 
IAEA_C2_Bothstd <- data.frame(d=runif(1:100)) 

R=4 
#make sure that names of the used subsets are listed in the 'list' 
RNumberList = list(IAEA_C2_NoStdCondition=IAEA_C2_NoStdCondition, 
        IAEA_C2_EAstd=IAEA_C2_EAstd, 
        IAEA_C2_STstd=IAEA_C2_STstd, 
        IAEA_C2_Bothstd=IAEA_C2_Bothstd 
) 
for(i in 1:R) { 

    LoopVariable = RNumberList[[i]] 
    #now I do different calculations with LoopVariable and so on 

    #convert list Variable to string for later usage in filename as unique identifier!! 
    SubNameStr = names(RNumberList)[i] 

    print(SubNameStr) 
    # I get "RNumberList[[i]]" as string, but want for i=1 --> [1] "IAEA_C2_NoStdCondition" and for i=2 --> [1] "IAEA_C2_EAstd" and so on 
} 

輸出:

[1] "IAEA_C2_NoStdCondition" 
[1] "IAEA_C2_EAstd" 
[1] "IAEA_C2_STstd" 
[1] "IAEA_C2_Bothstd" 
+0

感謝您的幫助! – Johannes 2014-11-21 00:30:02