2017-01-31 101 views
0

我中的R進行多次t檢驗,像這些循環:對於字符串變量

t.test(subset(data, type=="1" & string1=="string123" & string2=="string456")$value, 
       subset(data, type=="3" & string1=="string123" & string2=="string456")$value 

我希望執行這些測試爲字符串2的多個值:

list <- c("string456", "string457") 
for (i in list){ t.test(paste(subset(data, type=="1" & string1=="string123" & string2=="",i,"")$value, 
        subset(data, type=="3" & string1=="string123" & string2=="",i,"")$value) 

這將產生一個錯誤:

Error: unexpected numeric constant in "for (i in list){t.test(paste("subset(data, type=="1"

有什麼建議嗎?

+0

不理解這個:'string2 ==「」,i,「」'; (用c(「a」,「bb」,「ccc」))print(paste0(「xxx。」,i))替換爲'string2 == i' –

+0

''即for for-loop isn'問題 – jogo

回答

1

你並不需要使用paste()你的循環中:

list <- c("string456", "string457") 
for (i in list) { 
    t.test(subset(data, type=="1" & string1=="string123" & string2==i)$value,subset(data, type=="3" & string1=="string123" & string2==i)$value) 
} 
0

您可以供以後使用列表中使用lapply代替for -loop,節省您的t檢驗結果。

list <- c("string456", "string457") 
t_test_results <- lapply(list, function(x) 
         t.test(subset(data, type == "1" & string1 == "string123" & string2 == x)$value, 
           subset (data, type == "3" & string1 == "string123" & string2 == x)$value)) 

這樣,你甚至可以省略$value整個測試數據存儲在列表中,後來隨着t_test_results[[1]]$value調用值。