2016-03-13 1 views
0
x <- 1 
y <- 1 
for (y in 1:2){ 
    for (x in 1:2){ 

z <- x+y 

zresults <- data.frame(x, y, z) 

} 
} 

Здравствуйте вместе,Как добавить выходные значения из цикла for в файл data.frame в зависимости от входных значений переменной цикла в R?

извините за мой дамп вопрос, но я новичок в R, и это на самом деле моя первая попытка закодировать немного.

Я создал цикл for с индексами x и y, и я хочу сохранить выходные значения (z) вместе с соответствующими значениями x и y в data.frame. Введенный код явно ошибочен, но я не понимаю.

data.frame должен выглядеть так:

x y z 
1 1 1 2 
2 2 1 3 
3 1 2 3 
4 2 2 4 

Спасибо вам, ребята много заранее! Привет из Германии

+0

Результатом является то, что вы создаете 4 кадра данных вместо 1. –

ответ

1

Вот еще одно решение

x = 1 
y = 1 
result = NULL 
for (y in 1:2) { 
    for (x in 1:2) { 
    z = x + y 
    if (is.null(result)) { 
     result = data.frame(x,y,z) 
    } else { 
     result = rbind(result, data.frame(x,y,z)) 
    } 
    } 
} 
result 
4

Вот один из способов сделать то, что вы хотите сделать:

zresults <- expand.grid(x=1:2,y=1:2); 
zresults$z <- zresults$x + zresults$y; 
zresults; 
## x y z 
## 1 1 1 2 
## 2 2 1 3 
## 3 1 2 3 
## 4 2 2 4 

Заметки о вашей попытке:

  • Начальные присвоений x и y не нужны , Значения перезаписываются на первой итерации каждого соответствующего цикла с первым значением вектора RHS (1 в каждом случае). Также стоит отметить, что в отличие от языков, таких как C/C++ и Java, в R вам не нужно объявлять переменные; любому имени переменной может быть присвоено значение в любое время.
  • В вашей внутренней петле вы назначаете zresults. После первой итерации вы переписываете предыдущее значение, которое существовало для zresults. Если вы хотите, чтобы «создать» в data.frame одну строку за один раз, вы можете использовать следующие решения, хотя отмечают, что производительность не будет идеальным с этими подходами:

zresults[nrow(zresults)+1L,] <- c(x,y,z); 

или

zresults <- rbind(zresults,c(x,y,z)); 

Также отметим, что zresults должны быть инициализированы во-первых, до нароста цикла; например:

zresults <- data.frame(x=integer(),y=integer(),z=integer());