虽然我在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]]。 –