将函数应用于R中的多个列

时间:2018-06-01 02:32:20

标签: r loops

我读了一些关于它的帖子,但仍然没有得到答案。我很遗憾可能很简单。我有功能

GoodmanKruskalGamma(mydata$item1, mydata$totalscore, conf.level=0.95)

但是我想将它自动应用到我的数据框中的其他列,而不是手动为每个项目执行

GoodmanKruskalGamma(mydata$item1, mydata$totalscore, conf.level=0.95)
GoodmanKruskalGamma(mydata$item2, mydata$totalscore, conf.level=0.95)
GoodmanKruskalGamma(mydata$item3, mydata$totalscore, conf.level=0.95)

有人可以帮助我创建一个循环吗?还有另一种有用的方法吗?

谢谢!

*已解决*

我设法使用此代码来查找解决方案

install.packages("magicfor") #Install Magicfor
library(magicfor) #Load Magicfor package
magic_for(print, silent = TRUE) #Load Magic for
for(coln in c(2:41)) {
  print(GoodmanKruskalGamma(newdata[,coln], newdata$totalscore, conf.level=0.95))
} #Perform loop
results <- magic_result_as_dataframe() #Storage results
results #Show results

*其他问题*

我怎么能用代码来建立列对之间的相关性?例如,在一个项目和它的restscore之间?

GoodmanKruskalGamma(mydata$item1, mydata$restscore1, conf.level=0.95)
GoodmanKruskalGamma(mydata$item2, mydata$restscore2, conf.level=0.95)

我尝试了这个但是没有用

for(coln in c(2:41)) {
    for(coln2 in c(48:87)) {
  print(GoodmanKruskalGamma(newdata[,coln], newdata[,coln2], conf.level=NA))}  
  } #Perform loop
编辑:我为那些感兴趣的人找到了第二个解决方案

### Calculate Kruskal Gamma between Item and Restscore ###

results3 <- capture.output(
for(coln in c(2:41)) {
  for(restn in c(43:82)) {
  if(coln + 41 == restn){
  print(GoodmanKruskalGamma(newdata[,coln], newdata[,restn], conf.level=NA))
  }else{}
  }
})

1 个答案:

答案 0 :(得分:0)

for(coln in c('item1', 'item2', 'item3')) {
   GoodmanKruskalGamma(mydata[,coln], mydata$totalscore, conf.level=0.95)
}

应该做的伎俩