通过将参数传递给函数来对行进行子集化

Subsetting rows by passing an argument to a function

我有以下数据框,我使用 read.table() 将其导入 R(我将 read.table() 合并到 read_data() 中,这是我创建的一个函数,如果文件名字写得不恰当):

> raw_data <- read_data("n44.txt")
[1] #### Reading txt file ####
> head(raw_data)
  subject block trial_num soa target_identity prime_type target_type congruency prime_exposure target_exposure button_pressed   rt ac
1      99     1         1 200              82          9           1          9              0              36              1 1253  1
2      99     1         2 102              95          2           1          2             75              36              1 1895  1
3      99     1         3  68             257          2           2          1             75              36              2 1049  1
4      99     1         4  68              62          9           1          9              0              36              1 1732  1
5      99     1         5  34             482          9           3          9              0              36              3  765  1
6      99     1         6  68              63          9           1          9              0              36              1 2027  1 

然后我在我创建的 early_prep() 函数中使用 raw_data(我只复制了函数的相关部分):

early_prep <- function(file_name, keep_rows = NULL, id = NULL){

  if (is.null(id)) {
    # Stops running the function
    stop("~~~~~~~~~~~ id is missing. Please provide name of id column ~~~~~~~~~~~")
  }

  # Call read_data() function
  raw_data <- read_data(file_name)

  if (!is.null(keep_rows)) {
    raw_data <- raw_data[keep_rows, ]
    # Print to console
    print("#### Deleting unnecesarry rows in raw_data ####", quote = FALSE)

  }

  print(dim(raw_data))
  print(head(raw_data))
  return(raw_data)
  }

}

我的问题是 raw_data <- raw_data[keep_rows, ]。 当我输入 keep_rows = "raw_data$block > 1" 时,我得到的是:

> x1 <- early_prep(file_name = "n44.txt", keep_rows = "raw_data$block > 1", id = "subject")
[1] #### Reading txt file ####
[1] #### Deleting unnecesarry rows in raw_data ####
[1]  1 13
   subject block trial_num soa target_identity prime_type target_type congruency prime_exposure target_exposure button_pressed rt ac
NA      NA    NA        NA  NA              NA         NA          NA         NA             NA              NA             NA NA NA

我该如何解决这个问题,让它只删除我想要的行?

任何帮助将不胜感激

最佳,

阿亚拉

问题是您将条件作为字符串而不是实际条件传递,因此 R 无法在您需要时对其求值。

如果您仍然想将它作为字符串传递,您需要在正确的位置解析和评估它,例如:

cond = eval(parse(text=keep_rows))
raw_data = raw_data[cond,]

我认为这应该可行