r - 尝试使用 sapply 进行子集化时,未定义的列在 R 中选择错误
问题描述
在过去的一个小时里,我一直在为此烦恼,下面的代码在几个小时前运行良好,现在我不知道为什么它不再运行了。我已经搜索了有关未定义列选择错误的其他问题,但我认为我已经更正了这些答案中的所有信息。我确信有一些小东西我忽略了或不小心留下了,但我看不到它!
我有一个包含因子变量和数值变量的数据框,我想对子集进行子集化,以便保留所有因子变量,并删除列均值 < 0.1 的数值变量。
我在 stackoverflow 上的另一个问题上找到了以下代码,稍微修改后在我的测试数据上运行良好(在尝试在 3GB 大对象上尝试代码之前,我使用较小的子数据集进行测试)
meanfunction01 <- function(x){
if(is.numeric(x)){
mean(x) > 0.1
} else {
TRUE}
}
#then apply function to data table
Zdata <- Data1[,sapply(Data1, meanfunction01)]
我发誓我几个小时前正在使用它,然后当我回到它并尝试再次使用它时它停止工作,现在只返回以下错误:
Error in `[.data.frame`(Data1, , sapply(Data1, meanfunction01)) :
undefined columns selected
我试图修改函数,以便它循环多个对象(我有 54 个对象我想应用它,并且不想手动输入它们),但我不认为我编辑了原始函数,现在它已停止工作。
我的数据的简短 str() :
> str(Data1[1:10])
'data.frame': 11 obs. of 10 variables:
$ Name : Factor w/ 11688 levels "GTEX-1117F-0226-SM-5GZZ7",..: 8186 8242 8262 8270 8343 8388 8403 8621 8689 8709 ...
$ SEX : Factor w/ 2 levels "Female","Male": 1 2 2 1 1 2 2 1 2 1 ...
$ AGE : Factor w/ 6 levels "20-29","30-39",..: 4 4 1 3 3 1 3 3 3 2 ...
$ CIRCUMSTANCES: Factor w/ 5 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Tissue.x : Factor w/ 53 levels "Adipose_Subcutaneous",..: 7 7 7 7 7 7 7 7 7 7 ...
$ ENSG00000223972.4 : num 0 0.0701 0.0339 0.1149 0.0549 ...
$ ENSG00000227232.4 : num 12.5 17.2 13.1 16 15.7 ...
$ ENSG00000243485.2 : num 0.0717 0 0.1508 0 0.061 ...
$ ENSG00000237613.2 : num 0 0.0654 0 0.0402 0.0768 ...
$ ENSG00000268020.2 : num 0 0.0421 0.0611 0 0 ...
解决方案
因此,如果您唯一的问题是更改 data.frame 中整数变量的类,但您有很多列 (>10000),您可能需要考虑将 data.frame 转换为 data.table。您的代码将如下所示:
library(data.table)
Data1<-data.table(Data1) #or if you have your data in csv document just use fread instead of read.csv which will automatically give you a data.table.
然后你只需要使用这个找到整数列:
which(sapply(Data1,is.integer))
完全使用 data.table 命令:
Data1[,which(sapply(Data1,is.integer)):=lapply(.SD,as.numeric),.SDcols=which(sapply(Data1,is.integer))]
请注意,您不需要将上述代码行分配给任何内容,因为 data.table 使用指针,这使得它比 data.frame 或 tibbles 对象快得多。因此,运行上述行将有效地更新您的 Data1 对象。其他非整数列(即因子)的类将保持不变。
如果您还有其他问题,请更新,但这应该回答您的评论。祝你好运!
推荐阅读
- html - 响应式设计,什么时候从“桌面”设计跳到“平板”等等?
- ios - iOS15,每次单击另一个列表的文本时,文本之间的链接都会消失
- amazon-web-services - 我无法使用 ansible 从 s3 下载文件
- c# - 为什么这个未使用的断行实体框架?
- python - 如何在 jupyter notebook 中获得更好的数据框显示?
- javascript - 如何接收输入 21122001 作为 dmyyyy?我只能输入 21122001 作为格式 ddmmyyyy
- excel - 代码需要超过 10 分钟才能执行
- python-3.x - 如何在 python 曲线拟合中有效地使用“LMFIT”来拟合阻尼余弦波
- azureservicebus - 如何使用标准 Azure 逻辑应用的无状态工作流可靠地处理 Azure 服务总线消息
- python - “运行时错误:未安装默认上下文。”使用 Tensorflow Federated 时