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")
答案 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")
}
}