这是我的代码:
file.number <- c(1:29)
data <- setNames(lapply(paste0(file.number, ".csv"), read.csv), paste0(file.number, ".data"))
n <- c(1:3,10:15,21:26)
sw <- na.omit(data[[n]]$RT[data[[n]]$rep.sw=="sw"])
rep <-na.omit(data[[n]]$RT[data[[n]]$rep.sw=="rep"])
问题是第3行 - 如果n = 1,它可以工作,但如果我包含多个数字,我会收到错误“递归索引失败”。有没有办法可以一次访问多个索引?
谢谢R社区!任何建议将不胜感激!
答案 0 :(得分:1)
评论太长了。
看起来data
是数据框列表。列表元素被命名,例如1.data
,2.data
等,每个数据框都包含名为RT
和rep.sw
的列。所以,像这样:
## representative example???
df <- data.frame(RT=1:100,rep.sw=sample(c("sw","rep"),100,replace=TRUE))
data <- setNames(lapply(1:29,function(i)df),paste0(1:29,".data"))
您似乎想要从NA
(或RT
)行的每个数据框的res.sw=="sw"
列中删除"rep"
。
如果这是正确的,那么这样的事情应该有效:
sw <- lapply(data[n],function(df) with(df,na.omit(RT[rep.sw=="sw"])))
rep <- lapply(data[n],function(df) with(df,na.omit(RT[rep.sw=="rep"])))
此代码会将n
中标识的数据框一次一个地传递给函数,并为每个数据框返回RT
列rep.sw="sw"
的行{ {1}}被省略。结果将是一个向量列表。
我注意到大多数列都是作为因素导入的,这可能是一个坏主意。您可能希望使用以下方式导入:
NA