为R中的每一行运行一个循环

为R中的每一行运行一个循环,r,row,R,Row,作为一个初学者,我一直在努力做到这一点。我有一个文本,我想有一个数据框(或矩阵,如果这更容易)的行条目替换一些部分。 我有一个示例数据集,如下所示: x y z 1 5 apple green 2 7 banana yellow 3 13 mango red 我被这件事困住了: for (x in mydata[["x"]]) { for (y in mydata[["y"]]) { for (z in mydata[["z"]

作为一个初学者,我一直在努力做到这一点。我有一个文本,我想有一个数据框(或矩阵,如果这更容易)的行条目替换一些部分。 我有一个示例数据集,如下所示:

   x      y      z
1  5  apple  green
2  7 banana yellow
3 13  mango    red
我被这件事困住了:

for (x in mydata[["x"]]) {
    for (y in mydata[["y"]]) {
        for (z in mydata[["z"]]) {
            print(paste("The year is", x, y,"color", z))
        }
    }
}
然而,这使得文本具有所有可能的组合。 我想得到:

"The year is 5 apple color green"
"The year is 7 banana color yellow"
"The year is 13 mango color red"
我尝试了重复,for,if,while,但我得到了第一个、最后一个或全部组合返回。 我如何定义每行只需要一句话


谢谢你的帮助。

我们不需要循环,因为粘贴是矢量化的

paste("This year is", df1$x, df1$y, "color", df1$z)
或者使用
sprintf

sprintf("This year is %s %s color %s", df1$x, df1$y, df1$z) 
或者不调用“df1”3次

do.call(sprintf, c(df1, fmt = "This year is %s %s color %s")) 
#[1] "This year is 5 apple color green"   "This year is 7 banana color yellow"
#[3] "This year is 13 mango color red"  

OP的post使用嵌套的
for
循环,因此我们得到了所有的组合,而不是预期的组合。我们可以在行序列上循环,使用它作为索引来提取每列的元素并粘贴它

for(i in seq_len(nrow(df1))){
   print(paste("This year is", df1$x[i], df1$y[i], "color", df1$z[i]))
 } 
#[1] "This year is 5 apple color green"
#[1] "This year is 7 banana color yellow"
#[1] "This year is 13 mango color red"
数据
df1添加解决方案仅仅是因为尚未提及
apply
函数系列

我的单线解决方案:

df = data.frame(x=c(5,7,13), y = c('apple', 'banana','mango'), z = c('green', 'yellow', 'red'))

apply(df,1, function(a) paste("This year is", a[1], a[2], "color", a[3]) )
其中:

[1] "This year is  5 apple color green"
[2] "This year is  7 banana color yellow"
[3] "This year is 13 mango color red"   
此外,通过以下方法,一次打印一行输出也很容易:

writeLines(paste(...))
writeLines(paste(...))