如何在R中的for循环或lapply函数中传递变量名?

问题描述

无法在for循环中正确传递变量名或使用lapply函数

当我尝试此命令无循环/缓慢播放时,我得到了值:

{
    "Atlases": [
        {
            "TextureFilePath": "default-font-1.png","BaseLineY": 130,"HeightAboveBaseLine": 80,"HeightBelowBaseLine": 24,"distanceBetweenBaseLines": 117,"MinBlankPixelColumns": 10,"Lines": [
                "abcdefghijklm","nopqrstuvwxyz","ABCDEFGHIJKLM","nopQRSTUVWXYZ","0123456789=?´`'","!\"§$%&/()[]{}<>|","*~+-_.,:;\\@€#²³","äöüÄÖÜß"
            ]
        }
    ],"BaseKerning": 0.05,"Spaces": {
        " ": 0.2
    },"LineBreakYdistance": 1.1,"KerningOffsets": {
    }
}

但是当我将其放在> Boxplot.stats(df$price)$out [1] 38.7 43.8 41.3 50.0 50.0 50.0 50.0 37.2 39.8 37.9 50.0 [12] 50.0 42.3 48.5 50.0 44.8 50.0 37.6 46.7 41.7 48.3 42.8 [23] 44.0 50.0 43.1 48.8 50.0 43.5 45.4 46.0 50.0 37.3 50.0 [34] 50.0 50.0 50.0 50.0 下时,我得到 Null ,为什么?

lapply or for-loop

循环

df_numeric_names <- names(select_if(df,is.numeric))
df_numeric_names

[1] "price"       "resid_area"  "air_qual"    "room_num"    "age"         "dist1"       "dist2"       "dist3"      
 [9] "dist4"       "teachers"    "poor_prop"   "n_hos_beds"  "n_hot_rooms" "rainfall"    "parks"       "Sold" 

施加

for (feature in df_numeric_names){
  outlier_values <- Boxplot.stats(df$feature)$out
  print(outlier_values)
}

 - Output:

NULL
NULL
NULL

这是一件很简单的事情,但是我不确定我在做什么错以及如何解决

解决方法

此循环中的细微变化可以解决您的问题:

for (feature in df_numeric_names){
  outlier_values <- boxplot.stats(df[,feature])$out
  print(outlier_values)
}

还有一个小例子:

library(dplyr)
#Data
data("iris")
df <- iris
#Numeric names
df_numeric_names <- names(select_if(df,is.numeric))
#Loop
for (feature in df_numeric_names){
  outlier_values <- boxplot.stats(df[,feature])$out
  print(outlier_values)
}

输出:

numeric(0)
[1] 4.4 4.1 4.2 2.0
numeric(0)
numeric(0)

还可以使用lapply()使用与此类似的代码:

lapply(df_numeric_names,function(x) {
  boxplot.stats(df[,x])$out
})

输出:

[[1]]
numeric(0)

[[2]]
[1] 4.4 4.1 4.2 2.0

[[3]]
numeric(0)

[[4]]
numeric(0)