R中循环的新变量
我的问题是,我不知道如何使用for循环创建新变量 让我们假设有一个名为X的矩阵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(
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)
循环更有效。