使用 Inf 删除矩阵的行
Delete the rows of matrix with Inf
我有三个列表,Inf 是数字变量,"NaN" 是字符变量。
v1<-list(1,Inf,3,4,5,6,"NaN")
v2<-list(1,"NaN",3,4,5,6,5)
v3<-list(1,2,3,4,5,6,"NaN")
目前我可以用cbind做一个矩阵,但想要的结果是代码B)。
A) 我得到了什么:
matrix<-cbind(v1,v2,v3)
v1 v2 v3
[1,] 1 1 1
[2,] Inf "NaN" 2
[3,] 3 3 3
[4,] 4 4 4
[5,] 5 Inf 5
[6,] 6 6 6
[7,]"NaN" 7 "NaN"
B) 我想得到:
v1 v2 v3
[1,] 1 1 1
[2,] 3 3 3
[3,] 4 4 4
[4,] 6 6 6
上下文:
我想将位于 3 个列表中的一些结果导出到 .txt 文件中,对我来说简单的方法是使用 cbind 获取矩阵并使用
write.table(matrix, file="mymatrix.txt", row.names=FALSE, col.names=FALSE)
关于这个问题的一些建议。
1) 最好不要将matrix
对象命名为matrix
.
2) NaN
或NA
有特殊含义,不是字符串。通过使用引号 "NaN"
,很难应用自定义函数 is.nan/is.na
进行任何操作。所以,我们不得不求助于==/!=
3) 目前尚不清楚为什么 list
个人 cbind
被 matrix
。
根据输入的数据,我们可以用apply
遍历'matrix'的列,然后遍历list
的每个元素,检查是否有有限元并且不是 "NaN",得到 rowSums
,否定(!
- 将 0 元素转换为 TRUE,即行中的所有元素都是有限的,所有其他值都为 FALSE)。使用逻辑索引对行进行子集化。
matrix[!rowSums(apply(matrix, 2, FUN = function(x)
sapply(x, function(y) !(is.finite(y) & y !="NaN")))),]
# v1 v2 v3
#[1,] 1 1 1
#[2,] 3 3 3
#[3,] 4 4 4
#[4,] 6 6 6
我有三个列表,Inf 是数字变量,"NaN" 是字符变量。
v1<-list(1,Inf,3,4,5,6,"NaN")
v2<-list(1,"NaN",3,4,5,6,5)
v3<-list(1,2,3,4,5,6,"NaN")
目前我可以用cbind做一个矩阵,但想要的结果是代码B)。
A) 我得到了什么:
matrix<-cbind(v1,v2,v3)
v1 v2 v3
[1,] 1 1 1
[2,] Inf "NaN" 2
[3,] 3 3 3
[4,] 4 4 4
[5,] 5 Inf 5
[6,] 6 6 6
[7,]"NaN" 7 "NaN"
B) 我想得到:
v1 v2 v3
[1,] 1 1 1
[2,] 3 3 3
[3,] 4 4 4
[4,] 6 6 6
上下文: 我想将位于 3 个列表中的一些结果导出到 .txt 文件中,对我来说简单的方法是使用 cbind 获取矩阵并使用
write.table(matrix, file="mymatrix.txt", row.names=FALSE, col.names=FALSE)
关于这个问题的一些建议。
1) 最好不要将matrix
对象命名为matrix
.
2) NaN
或NA
有特殊含义,不是字符串。通过使用引号 "NaN"
,很难应用自定义函数 is.nan/is.na
进行任何操作。所以,我们不得不求助于==/!=
3) 目前尚不清楚为什么 list
个人 cbind
被 matrix
。
根据输入的数据,我们可以用apply
遍历'matrix'的列,然后遍历list
的每个元素,检查是否有有限元并且不是 "NaN",得到 rowSums
,否定(!
- 将 0 元素转换为 TRUE,即行中的所有元素都是有限的,所有其他值都为 FALSE)。使用逻辑索引对行进行子集化。
matrix[!rowSums(apply(matrix, 2, FUN = function(x)
sapply(x, function(y) !(is.finite(y) & y !="NaN")))),]
# v1 v2 v3
#[1,] 1 1 1
#[2,] 3 3 3
#[3,] 4 4 4
#[4,] 6 6 6