使用lapply并显示变量名称

时间:2017-03-31 21:45:43

标签: r lapply

我是R的新手,虽然我已经用Python和Java编程了很多。我搜索过这些关于使用for循环来运行变量列表的问题,每个人都提到使用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

问题是每个输出都显示数据:bat $ 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 

1 个答案:

答案 0 :(得分:0)

我建议创建一个相关矩阵,而不是使用lapply来做这个。

此链接将指导您完成该操作 http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start-guide-to-analyze-format-and-visualize-a-correlation-matrix-using-r-software

您可以使用dplyr选择所需的变量:

select(bat, one_of(varlist))

这应该比你正在使用的方法容易一些。