为什么我得到错误“未知或未初始化列:R中的'x'. '?[重复]

hrirmatl  于 2023-01-22  发布在  其他
关注(0)|答案(2)|浏览(131)
    • 此问题在此处已有答案**:

Dynamically select data frame columns using $ and a character value(10个答案)
昨天关门了。
作为一个更大的函数的一部分,我尝试提取唯一的,非na值,这样我就可以迭代该列表,在这个函数中,用户应该能够输入他们的 Dataframe 中存在的任何列名。
在过去,当我必须将用户输入转换为字符串时,x_character <- deparse(substitute(x))是有效的,但是现在我得到NULL作为下面函数的输出,并带有1: Unknown or uninitialised column: x警告。
为什么R不能识别这个带$操作符的x_字符?它在过去是有效的,所以我不确定我在这里是否做错了什么。

#Sample data
library(dplyr)
my_data <- tibble(level = c(rep(c("1st", "2nd", NA, "3rd"), 4), NA, "2nd"),
                  id = c(1:17, 30),
                  score = c(81:97, 70))

下面是我的代码:

unique_without_na <- function(data, x) {
  #Pulls out all rows with data in the cut_by argument; drops nas
  x_character <- deparse(substitute(x))
  print(x_character) #just a check
  
  unique_x <- data$x_character[!is.na(data$x_character)] %>% unique()
  unique_x
  
}

unique_without_na(my_data, level) #doesn't work; I've also tried "level" which also fails
unique_without_na(my_data, score) #also doesn't work
1bqhqjot

1bqhqjot1#

将它们放在[[中,而不是使用$

unique_without_na <- function(data, x) {
  #Pulls out all rows with data in the cut_by argument; drops nas
  x_character <- deparse(substitute(x))
  print(x_character) #just a check
  
  unique_x <- data[[x_character]][!is.na(data[[x_character]])] %>% unique()
  unique_x
  
}

unique_without_na(my_data, level)
#> [1] "level"
#> [1] "1st" "2nd" "3rd"
unique_without_na(my_data, score) 
#> [1] "score"
#>  [1] 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 70
yuvru6vn

yuvru6vn2#

或者使用expreval,我们可以尝试以下操作。
这里我们可以使用$代替[[

library(rlang)
library(dplyr)

unique_without_na <- function(data, x) {
  #Pulls out all rows with data in the cut_by argument; drops nas
  x_character <- deparse(substitute(x))
  print(x_character) #just a check
  
  unique_x <- eval(expr('$'(data,!!x_character)))[!is.na(eval(expr('$'(data,!!x_character))))] %>% unique()
  unique_x
  
}
unique_without_na(my_data, level)
#> [1] "level"

创建于2023年1月20日,使用reprex v2.0.2

输出

[1] "1st" "2nd" "3rd"

相关问题