0

我正在动态创建一些变量,然后尝试将它们存储在数据框中row wise。但是,我只得到数据框中的最后一个值。以前的值被新值替换。

threshold <- 0.5
path_length <- 2

for (i in 1:3) {
  assign(paste('x', i, sep='_'), 1)
  assign(paste('y', i, sep='_'), get(eval(paste0("x_", i, sep=""))) + (threshold * 0.2) - (path_length - 1.3)) 
  assign(paste('z', i, sep='_'), get(eval(paste0("y_", i, sep=""))) * i + 2)
  
  df_1 <- data.frame(i=i,
                     x=get(eval(paste0("x_", i, sep=""))), 
                     y=get(eval(paste0("y_", i, sep=""))), 
                     z=get(eval(paste0("z_", i, sep=""))))
}

我得到这个输出

  i  x   y   z
1 3  1  0.4 3.2

我的预期输出

  i  x   y   z
1 1  1  0.4 2.4
1 2  1  0.4 2.8
1 3  1  0.4 3.2

谢谢你。

4

1 回答 1

0
threshold <- 0.5
path_length <- 2
df <- data.frame()
for (i in 1:3) {
  assign(paste('x', i, sep='_'), 1)
  assign(paste('y', i, sep='_'), get(eval(paste0("x_", i, sep=""))) + (threshold * 0.2) - (path_length - 1.3)) 
  assign(paste('z', i, sep='_'), get(eval(paste0("y_", i, sep=""))) * i + 2)
  
  df_1 <- data.frame(i=i,
                     x=get(eval(paste0("x_", i, sep=""))), 
                     y=get(eval(paste0("y_", i, sep=""))), 
                     z=get(eval(paste0("z_", i, sep="")))
                     )
  df <- rbind(df,df_1)
}
df

输出

  i x   y   z
1 1 1 0.4 2.4
2 2 1 0.4 2.8
3 3 1 0.4 3.2

它可以像

i = 1:3
x = rep(1, 3)
y = x + (threshold * 0.2) - (path_length - 1.3)
z = y * i + 2
df <- data.frame(i,x,y,z)
df
于 2021-03-26T01:48:56.287 回答