2017-03-31 47 views
0

雖然我在Python和Java中進行了很多編程,但對R來說我還是比較新的。我已經搜索了關於使用for循環遍歷變量列表的所有問題,並且每個人都繼續提及使用lapply。我已經這樣做了,而且我的代碼的工作原理是它給了我答案,但它不起作用,因爲答案隱藏了重要的細節。這是我的代碼和一些輸出。使用lapply並顯示變量名稱

> bat <- read.csv(file="mlbTeam2016-B.csv", header=TRUE) 
> varlist <- names(bat)[6:32] 
> varlist 
[1] "AB.B" "R.B"  "H.B"  "X2B.B" "X3B.B" "HR.B" "RBI.B" 
[8] "BB.B" "SO.B" "SB.B" "CS.B" "AVG.B" "OBP.B" "SLG.B" 
[15] "OPS.B" "IBB.B" "HBP.B" "SAC.B" "SF.B" "TB.B" "XBH.B" 
[22] "GDP.B" "GO.B" "AO.B" "GO_AO.B" "NP.B" "PA.B" 
> lapply(varlist, function(i){ 
+ var <- eval(parse(text=paste("bat$",i))) 
+ cor.test(bat$W, var, alternative="two.sided", method="pearson") 
+ }) 
[[1]] 

     Pearson's product-moment correlation 

data: bat$W and var 
t = 0.35067, df = 28, p-value = 0.7285 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
-0.3013221 0.4164731 
sample estimates: 
     cor 
0.06612551 


etc 

的問題是,每個輸出數據說:蝙蝠$ W和VAR沒有告訴我是哪個變量在這一步測試。這很好,除了我不得不回去查看它對應的變量。這比在幾十次輸入此代碼更好,但並不理想。我也知道,使用eval(解析(是壞的,但我想不出別的辦法來處理該行

這是我想要的輸出:

[[1]] 

     Pearson's product-moment correlation 

data: bat$W and bat$AB.B 
t = 0.35067, df = 28, p-value = 0.7285 
alternative hypothesis: true correlation is not equal to 0 
95 percent confidence interval: 
-0.3013221 0.4164731 
sample estimates: 
     cor 
0.06612551 
+3

[FUN中可能存在重複索引名稱](http://stackoverflow.com/questions/9950144/access-lapply-index-names-inside-fun) – manotheshark

+1

爲什麼醜陋而低效的var < - eval (解析(文=膏( 「蝙蝠$」,I)))'?試試'var <-bat [[i]]'。至於你的問題,使用'sapply'而不是'lapply'和'simplify = FALSE'參數。 – nicola

+0

@nicola使這兩個改變似乎已使現在的代碼可用。現在它告訴我在輸出開始時它正在測試什麼變量而不是[[1]]。 –

回答