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"
输出中列表的名称不正确。
答案 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
列表中。