Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用sapply子集时,R中选择的未定义列出错_R - Fatal编程技术网

尝试使用sapply子集时,R中选择的未定义列出错

尝试使用sapply子集时,R中选择的未定义列出错,r,R,在过去的一个小时里,我一直在为这个问题焦头烂额,下面的代码在几个小时前工作得很好,现在我不知道为什么它不再工作了。我已经搜索了关于未定义列选择错误的其他问题,但我想我已经更正了这些答案中的所有信息。我肯定有一些小东西我忽略了或不小心留在里面,但我看不到 我有一个同时包含因子和数值变量的数据框,我想要子集,这样我就保留了所有因子变量,并删除了列平均值小于0.1的数值变量 我在stackoverflow的另一个问题上发现了下面的代码,稍微修改一下,它在我的测试数据上运行得很好(在一个大的3GB对象上

在过去的一个小时里,我一直在为这个问题焦头烂额,下面的代码在几个小时前工作得很好,现在我不知道为什么它不再工作了。我已经搜索了关于未定义列选择错误的其他问题,但我想我已经更正了这些答案中的所有信息。我肯定有一些小东西我忽略了或不小心留在里面,但我看不到

我有一个同时包含因子和数值变量的数据框,我想要子集,这样我就保留了所有因子变量,并删除了列平均值小于0.1的数值变量

我在stackoverflow的另一个问题上发现了下面的代码,稍微修改一下,它在我的测试数据上运行得很好(在一个大的3GB对象上尝试代码之前,我正在使用较小的子数据集进行测试)

我试图修改该函数,使其在多个对象上循环(我有54个对象要应用它,不想手动键入它们),但我不认为我编辑了原始函数,现在它已停止工作

简要介绍我的数据:

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

<> P>因此,如果您的唯一问题是更改DATA框架中的整型变量类,但您有许多列(>10000),您可能需要考虑将DATA框架转换为DATA表。您的代码将如下所示:

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.
使用data.table命令将其放在一起:

Data1[,which(sapply(Data1,is.integer)):=lapply(.SD,as.numeric),.SDcols=which(sapply(Data1,is.integer))]
注意,您不需要将上述代码行分配到任何内容中,因为data.table使用的指针比data.frame或tibbles对象快得多。因此,运行上述行将有效地更新Data1对象。其他非整数列(即因子)的类别将保持不变


请更新,如果你有进一步的问题,但这应该回答你的意见。祝你好运

如果没有一个工作示例来演示这个问题,就很难猜测问题可能是什么。您可能会在Ok中找到一些有用的提示,在尝试head()我的数据以便为您创建示例数据集时,我想我已经缩小了问题的范围。当我将对象重新加载到我的环境中时,它似乎将我的一些列分类为整数而不是数字。当我在head([1:20])子集上运行代码时,它工作得很好,因为整数列稍后开始出现在第10000列左右的日期中。现在,我试图找出如何将这些列重新标记为数字,这是一个完全不同的问题。无论如何谢谢你!为什么只是怀疑数据结构在沿着多个列移动时会发生变化?为什么不运行
head()
而不限制列的范围来检查列的结构?如果事实证明某些列确实是整数而不是数字,那么使用以下行重新构造它们:
Data1[,4:33],主要是因为在数据帧中使用head()而不限制>50000列的列将很难手动检查!我已经开始使用lapply ThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtThoughtTh,我没有意识到我可以通过在mean()函数中使用na.rm=TRUE来删除它。很抱歉,这些基本的问题需要非常基本的解决方案,但我对编码和自学还是非常陌生!
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))
Data1[,which(sapply(Data1,is.integer)):=lapply(.SD,as.numeric),.SDcols=which(sapply(Data1,is.integer))]