我是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
答案 0 :(得分:0)
我建议创建一个相关矩阵,而不是使用lapply来做这个。
您可以使用dplyr选择所需的变量:
select(bat, one_of(varlist))
这应该比你正在使用的方法容易一些。