通过将参数传递给函数来对行进行子集化
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,]
我认为这应该可行
我有以下数据框,我使用 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,]
我认为这应该可行