我试图编写一个双for
循环来按顺序绘制两个输出。
基于以下两个向量:
vec.a <- c("a1", "a2", "a3")
vec.b <- c("b1", "b2", "b3")
我尝试了第一个循环:
for (i in vec.a){
cat(i)
for (j in vec.b){
cat(j, "| ")
}
}
输出结果为:
a1b1 | b2 | b3 | a2b1 | b2 | b3 | a3b1 | b2 | b3 |
我尝试了第二个循环:
for (i in vec.a){
for (j in vec.b){
cat(i)
cat(j, "| ")
}
}
输出结果为:
a1b1 | a1b2 | a1b3 | a2b1 | a2b2 | a2b3 | a3b1 | a3b2 | a3b3 |
但所需的输出是:
a1b1 | a2b2 | a3b3
怎么做?
更新
我想比较两个数据帧的相同位置的列之间的图形。但显示的顺序并不是我想要的。我认为逻辑与上面的例子相同。
set.seed(99)
df.a <- matrix(rnorm(50), 10, 10, # 10 rows and 10 columns
dimnames=list(paste("p", 1:10, sep = ""),
paste("sp.A", 1:10, sep = "")))
df.b <- matrix(rnorm(50), 20, 10, # 20 rows and 10 columns
dimnames=list(paste("p", 1:20, sep = ""),
paste("sp.B", 1:10, sep = "")))
为了比较图形,我使用了这样的东西:
par(mfrow = c(1,2))
invisible(lapply(colnames(df.a[ ,1:ncol(df.a)]), function(x){
invisible(lapply(colnames(df.b[ ,1:ncol(df.b)]), function(w){
plot(df.a[ ,x], main = x)
plot(df.b[ ,w], main = w)
}))
}))
如何绘制与df.a
的第一列配对的df.b
的第一列,依此类推?
答案 0 :(得分:1)
在这里,我们将两个矢量粘贴在一起,这将逐个单元地绑定它们。我们将所有单元格绑定在一起以创建一个单独的字符串,使用&#34; | &#34;作为崩溃参数。
# Creating the vectors
vec.a <- c("a1", "a2", "a3")
vec.b <- c("b1", "b2", "b3")
# Creating the output
paste(vec.a,vec.b,sep="",collapse=" | ")
输出:
"a1b1 | a2b2 | a3b3"
答案 1 :(得分:1)
根据您的评论,我认为您正在寻找mapply
mapply(FUN = cat, vec.a, vec.b, MoreArgs = list("| ", sep = ""))
将上面的invisible()
包裹起来会抑制mapply
invisible(mapply(FUN = cat, vec.a, vec.b, MoreArgs = list("| ", sep = "")))
使用for循环的解决方案: 以下代码生成相同的输出,但使用for循环
for (i in seq_along(vec.a)){
cat(vec.a[i], vec.b[i], "|", sep = "")
}
更新问题的解决方案
set.seed(99)
df.a <- matrix(rnorm(50), 10, 10, # 10 rows and 10 columns
dimnames=list(paste("p", 1:10, sep = ""),
paste("sp.A", 1:10, sep = "")))
df.b <- matrix(rnorm(50), 20, 10, # 20 rows and 10 columns
dimnames=list(paste("p", 1:20, sep = ""),
paste("sp.B", 1:10, sep = "")))
par(mfrow = c(1,2))
for (i in 1:ncol(df.a)){
plot(df.a[ ,i], main = i)
plot(df.b[ ,i], main = i)
}