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

时间:2015-06-22 11:19:08

标签: r subset

我有以下数据框,我使用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 

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

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

如何解决这个问题,以便只删除我想要的行?

非常感谢任何帮助

最佳,

Ayala

1 个答案:

答案 0 :(得分:0)

问题在于您将条件作为字符串传递而不是作为真实条件传递,因此R无法在需要时对其进行评估。

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

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

这应该有效,我想