Вывести вывод l oop в виде одной строки в R - PullRequest
1 голос
/ 23 января 2020

Я хочу напечатать вывод в виде одной строки для каждой переменной dd и vv

df=c(1:20)
df=matrix(df,ncol = 5,nrow = 4, byrow = T)
x=c(1.5,7.5,12.5,19.5)
for (j in 1:4) {
  for (i in 1:4) {
    if( sum(df[j,i],df[j,i+1])/2 ==x[j])
    {xx=c(df[j,i],df[j,i+1]) }
  }
  dd=as.vector((df[j,i+1]-df[j,i])/6)
  vv=as.vector(xx)
  print(c(vv,dd))
}

Я получил следующее

  [1] 1.0000000 2.0000000 0.1666667
  [1] 7.0000000 8.0000000 0.1666667
  [1] 12.0000000 13.0000000  0.1666667
  [1] 19.0000000 20.0000000  0.1666667

и что я хочу напечатать из своего кода составляет

[1]  1  2  7  8 12 13 19 20

и

[1]0.1666667 0.1666667 0.1666667 0.1666667

Ответы [ 3 ]

2 голосов
/ 23 января 2020

Вот способ сохранения результатов в векторе:

# store the results
dd_var = c()
vv_var = c()

for (j in 1:4) {
  for (i in 1:4) {
    if( sum(df[j,i],df[j,i+1])/2 ==x[j])
    {xx=c(df[j,i],df[j,i+1]) }
  }

  dd=as.vector((df[j,i+1]-df[j,i])/6)
  vv=as.vector(xx)
  dd_var = append(dd_var, dd)
  vv_var = append(vv_var, vv)
}

cat(dd_var,'\t')
0.1666667 0.1666667 0.1666667 0.1666667 

cat(vv_var, '\t')
1 2 7 8 12 13 19 20
0 голосов
/ 24 января 2020

Ситуация здесь такова, что оператор print находится внутри for для l oop и не сохраняет ваши результаты как вектор, который добавляет все ответы (вместо этого ваш код сохраняет каждый результат как уникальную переменную для каждой итерации) , Я вижу предыдущие ответы, но вот моя модификация, которая очень похожа на ваш оригинал.

1) Добавлено два вектора NULL, dd и vv

2) Сохранение каждого зацикленного результата в соответствующих векторах

3) Оператор печати за пределами для l oop

dd <- NULL
vv <- NULL


df=c(1:20)
df=matrix(df,ncol = 5,nrow = 4, byrow = T)
x=c(1.5,7.5,12.5,19.5)
for (j in 1:4) {
  for (i in 1:4) {
    if( sum(df[j,i],df[j,i+1])/2 ==x[j])
    {xx=c(df[j,i],df[j,i+1]) }
  }
  dd <- as.vector(c(dd,(df[j,i+1]-df[j,i])/6))
  vv <- as.vector(c(vv,(xx)))
}

print(dd)
print(vv)
0 голосов
/ 23 января 2020

Очень похоже на то, что придумал @YOLO ... Сохраните результат в объект и напечатайте его, используя cat. Есть и другие способы сделать это.

dd.out <- c()
vv.out <- c()

for (j in 1:4) {
  for (i in 1:4) {
    if( sum(df[j,i],df[j,i+1])/2 ==x[j])
    {xx=c(df[j,i],df[j,i+1]) }
  }

  dd=as.vector((df[j,i+1]-df[j,i])/6)
  vv=as.vector(xx)

  # Growing an object is not optimal, but works.
  dd.out <- c(dd.out, dd)
  vv.out <- c(vv.out, vv)
}
cat(vv.out, "\n", dd.out)

1 2 7 8 12 13 19 20 
 0.1666667 0.1666667 0.1666667 0.1666667
...