【问题标题】:how to pass variable name in for loop or lapply functions in R? [duplicate]如何在R中的for循环或lapply函数中传递变量名? [复制]
【发布时间】:2020-08-26 14:37:21
【问题描述】:

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

当我尝试这个命令时没有循环/laaply 它可以工作并且我得到了值:

> 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

但是当我把它放在lapply or for-loop 下时,我得到Null,为什么?

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

应用

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

 - output
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL


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

【问题讨论】:

  • 不要使用$,同时按字符值设置数据帧。

标签: r for-loop lapply


【解决方案1】:

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

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)

【讨论】:

  • 感谢@Duck 也提供了示例并且它有效,但我仍然不明白为什么子设置 df[, feature] 将有效但不选择功能本身。 R中的这些东西变得有点混乱。无论如何,谢谢,一旦他们让我接受你的回答。
  • 不错不错!有时使用$ 运算符可能会出现问题,因为它需要在数据框中找到名称。这就是为什么有时最好使用示例中的括号。如果你接受这个答案就好了:)
猜你喜欢
  • 1970-01-01
  • 2013-10-25
  • 2021-02-16
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多