如何在for循环中创建变量名

时间:2017-08-14 10:59:27

标签: r list for-loop

x<-as.factor(c("ds","sd","ds","dd"))
fn<-function(x){
results<-list(a=c(2,3,4),b=c("3","d"))
for(i in 1:length(levels(x))){
results<-list(results,
assign(paste("g", i, sep = ""), levels(x)[i]))
  }
return(results)
}
fn(x)
 [[1]]
 [[1]][[1]]
 [[1]][[1]][[1]]
 [[1]][[1]][[1]]$a
 [1] 2 3 4

 [[1]][[1]][[1]]$b
 [1] "3" "d"


 [[1]][[1]][[2]]
 [1] "dd"


 [[1]][[2]]
 [1] "ds"


 [[2]]
 [1] "sd"

以上输出不是我想要的。我希望它像下面的输出

$a
[1] 2 3 4
$b
"3" "d"
$g1
"dd"
$g2
"ds"
$g3
"sd"

输出中列表的名称不正确。

1 个答案:

答案 0 :(得分:0)

我不确定你的问题背后的原因是什么,但这可以在没有任何for循环的情况下完成。请尝试

x <- as.factor(c("ds", "sd", "ds", "dd"))
results <- list(a = c(2, 3, 4), b = c("3", "d"))
results <- c(results, setNames(as.list(levels(x)), paste0("g", seq_len(nlevels(x)))))

results

重新创建预期结果:

$a
[1] 2 3 4

$b
[1] "3" "d"

$g1
[1] "dd"

$g2
[1] "ds"

$g3
[1] "sd"

x的级别从向量强制转换为列表。然后使用setNames()重命名列表元素。这些名称是通过粘贴g和一系列数字创建的字符向量,这些数字从1到x中的级别数。最后,这个新列表将附加到现有的result列表中。