2017-03-31 49 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]]。 –

回答