雖然我在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
[FUN中可能存在重複索引名稱](http://stackoverflow.com/questions/9950144/access-lapply-index-names-inside-fun) – manotheshark
爲什麼醜陋而低效的var < - eval (解析(文=膏( 「蝙蝠$」,I)))'?試試'var <-bat [[i]]'。至於你的問題,使用'sapply'而不是'lapply'和'simplify = FALSE'參數。 – nicola
@nicola使這兩個改變似乎已使現在的代碼可用。現在它告訴我在輸出開始時它正在測試什麼變量而不是[[1]]。 –