Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中循环的新变量_R_For Loop - Fatal编程技术网

R中循环的新变量

R中循环的新变量,r,for-loop,R,For Loop,我的问题是,我不知道如何使用for循环创建新变量 让我们假设有一个名为X的矩阵 x1 x2 x3 1 2 3 4 5 6 7 8 9 我想得到的是(这很简单,但只是一个例子) 我想使用这样的for循环: for (i in 1:3){ v_i=X[i,i] } 但它不起作用,因为我不知道如何使用“I”索引(v1、v2、v3,…)创建新变量。您可以使用分配 for (i in 1:3) { assign(sprintf("X_%s", i), i) } > ls(

我的问题是,我不知道如何使用for循环创建新变量

让我们假设有一个名为X的矩阵

x1 x2 x3
1  2  3
4  5  6
7  8  9
我想得到的是(这很简单,但只是一个例子)

我想使用这样的for循环:

for (i in 1:3){
  v_i=X[i,i]
 }

但它不起作用,因为我不知道如何使用“I”索引(v1、v2、v3,…)创建新变量。

您可以使用
分配

for (i in 1:3) {
  assign(sprintf("X_%s", i), i)
}

> ls()
[1] "i"   "X_1" "X_2" "X_3"

但我愿意和我的家人打赌,这可能不是你真正想要的。很多事情都可以用一个列表来解决,这个列表附带了一些已经制作好的工具来处理它们(比如
lappy
sapply

你可以使用
assign

for (i in 1:3) {
  assign(sprintf("X_%s", i), i)
}

> ls()
[1] "i"   "X_1" "X_2" "X_3"

但我愿意和我的家人打赌,这可能不是你真正想要的。很多事情都可以通过使用列表来解决,列表中附带了一些已经制作好的工具来处理它们(如
lappy
sapply

For循环在全局环境中执行(函数创建它们自己的),因此您需要为循环创建一个对象以进行更新

MyNewX <- vector(mode="numeric",length=3)

MyNewXFor循环在全局环境中执行(函数创建它们自己的函数),因此需要为循环创建一个要更新的对象

MyNewX <- vector(mode="numeric",length=3)

MyNewX假设X是您的数据帧名称

for (i in 1:3) {
      assign(eval(paste0("v", i)), X[i,i])
   }

假设X是您的数据帧名称

for (i in 1:3) {
      assign(eval(paste0("v", i)), X[i,i])
   }

也许这只是一个玩具的例子,但看起来你想要访问矩阵的对角线。这比使用
diag(X)
循环更有效。也许这只是一个玩具示例,但看起来您想要访问矩阵的对角线。这比使用
diag(X)
循环更有效。