检查每个元素是否等于1

时间:2018-06-22 20:24:29

标签: r for-loop

division <- Residuals/Alignment
na.omit(division)
# savethis <- data.frame()

for(i in division) {
  if(c(i) == 1) {
    print("yes")
  }
}

残差和路线都是数据帧。我尝试检查比较除法中的每个元素,并打印出等于1的结果。但是,我不断收到此错误:条件的长度> 1,并且仅使用第一个元素。

division <- structure(list(paf...10. = c(0.995815103671295, 0.995244435990108, 
0.999189408268036, 0.746572212065813, 0.744104599579734, 0.559049923026171
)), .Names = "paf...10.", row.names = c(NA, 6L), class = "data.frame")

2 个答案:

答案 0 :(得分:0)

这是因为您所引用的data.frame需要您指定目标列:

division <- Residuals/Alignment
na.omit(division)
# savethis <- data.frame()

for(i in division$paf...10.) {
  if(c(i) == 1) {
    print("yes")
  }
}

答案 1 :(得分:0)

您没有提供数据,但是我可以说明内置数据的问题。我假设“残差”和“路线”具有相似的结构,因此划分是有意义的。师长什么样?

division <- iris[,1:4] / iris[,1:4]
str(division)
'data.frame':   150 obs. of  4 variables:
 $ Sepal.Length: num  1 1 1 1 1 1 1 1 1 1 ...
 $ Sepal.Width : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Petal.Length: num  1 1 1 1 1 1 1 1 1 1 ...
 $ Petal.Width : num  1 1 1 1 1 1 1 1 1 1 ...

这是另一个数据帧。如果您尝试遍历data.frame会发生什么?

for(i in iris[,1:4]/iris[,1:4]) { print(str(i)) }
 num [1:150] 1 1 1 1 1 1 1 1 1 1 ...
NULL
 num [1:150] 1 1 1 1 1 1 1 1 1 1 ...
NULL
 num [1:150] 1 1 1 1 1 1 1 1 1 1 ...
NULL
 num [1:150] 1 1 1 1 1 1 1 1 1 1 ...
NULL

i接连出现在每个中。因此,您的比较if(c(i) == 1)将整个列与1进行比较。c(i) == 1是真值的向量。 if不适用于比较向量,仅适用于标量,因此发出此警告是为了让您知道它将仅使用比较向量的第一个元素。

如果要将每个元素与1进行比较,则可以使用:

for(i in as.vector(as.matrix(division))) { 
  if(c(i) == 1) {
    print("yes")
  } 
}