R 降价循环

R markdown loops

这段代码我已经尝试了一段时间,不明白为什么它不起作用(它实际上比开始时更糟糕,但仍然不是我需要的)

for(i in names(swiss)){
print(paste(names(swiss[i]),", which mean is", round(sapply(swiss, mean), 2)))
}

## [1] "Fertility , which mean is 70.14" "Fertility , which mean is 50.66"
## [3] "Fertility , which mean is 16.49" "Fertility , which mean is 10.98"
## [5] "Fertility , which mean is 41.14" "Fertility , which mean is 19.94"
## [1] "Agriculture , which mean is 70.14" "Agriculture , which mean is 50.66"
## [3] "Agriculture , which mean is 16.49" "Agriculture , which mean is 10.98"
## [5] "Agriculture , which mean is 41.14" "Agriculture , which mean is 19.94"
## [1] "Examination , which mean is 70.14" "Examination , which mean is 50.66"
## [3] "Examination , which mean is 16.49" "Examination , which mean is 10.98"
## [5] "Examination , which mean is 41.14" "Examination , which mean is 19.94"
## [1] "Education , which mean is 70.14" "Education , which mean is 50.66"
## [3] "Education , which mean is 16.49" "Education , which mean is 10.98"
## [5] "Education , which mean is 41.14" "Education , which mean is 19.94"
## [1] "Catholic , which mean is 70.14" "Catholic , which mean is 50.66"
## [3] "Catholic , which mean is 16.49" "Catholic , which mean is 10.98"
## [5] "Catholic , which mean is 41.14" "Catholic , which mean is 19.94"
## [1] "Infant.Mortality , which mean is 70.14"
## [2] "Infant.Mortality , which mean is 50.66"
## [3] "Infant.Mortality , which mean is 16.49"
## [4] "Infant.Mortality , which mean is 10.98"
## [5] "Infant.Mortality , which mean is 41.14"
## [6] "Infant.Mortality , which mean is 19.94"

在这里,我们遍历列名并在循环内部,再次使用不需要的 sapply 循环。相反,我们通过将列提取为 vector 以及相应的列名称 swiss[[i]]round

来获得 mean
for(i in names(swiss)){
  print(paste(i,", which mean is", round(mean(swiss[[i]]), 2)))
 }
#[1] "Fertility , which mean is 70.14"
#[1] "Agriculture , which mean is 50.66"
#[1] "Examination , which mean is 16.49"
#[1] "Education , which mean is 10.98"
#[1] "Catholic , which mean is 41.14"
#[1] "Infant.Mortality , which mean is 19.94"

注意:当我们执行 in 时,值 i 是每个列名。我们不需要再做一次 names(swiss[i])


或使用矢量化选项,因为 pastecolMeans 是矢量化的

paste(names(swiss), ", which mean is ",  round(colMeans(swiss), 2))
#[1] "Fertility , which mean is  70.14"    
#[2] "Agriculture , which mean is  50.66"    
#[3] "Examination , which mean is  16.49"     
#[4] "Education , which mean is  10.98"     
#[5] "Catholic , which mean is  41.14"   
#[6] "Infant.Mortality , which mean is  19.94"

这是另一个基本 R 选项,使用 colMeans + stack + paste

do.call(paste, cbind(stack(round(colMeans(swiss), 2)), ", which mean is")[c(2, 3, 1)])

这给出了

[1] "Fertility , which mean is 70.14"
[2] "Agriculture , which mean is 50.66"
[3] "Examination , which mean is 16.49"
[4] "Education , which mean is 10.98"       
[5] "Catholic , which mean is 41.14"
[6] "Infant.Mortality , which mean is 19.94"