2015-06-22 46 views
0

我有以下数据框,我使用read.table()(我在read_data()中并入了read.table(),这是我创建的一个函数,如果文件名的写法不适当):通过将参数传递给函数来对子集进行子集

> 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_dataearly_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 

我怎样才能解决这个问题,因此只会删除我想要的行?

任何帮助,将不胜感激

最佳,

阿亚拉

+0

@VeerendraGadekar。但是,因为我只在'eraly_prep()'内部使用'read_data()',所以如果我尝试你的建议,我会得到以下错误:'子集(raw_data,block> 1):未找到对象'raw_data'错误。我想在'early_prep()'里面使用'read_data()'而不是作为一个独立的函数 – ayalaall

回答

0

的问题是,你传递的情况作为一个字符串,而不是作为一个真正的条件,所以R可以不对其进行评估当你想要它。

,如果你仍然希望把它作为你需要在正确的地方,例如分析和EVAL它串:

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

这应该工作,我觉得

+0

非常感谢!有用! – ayalaall

相关问题