我具有以下功能,可以找到属于4个不同因素的不同案件数。 test
是包含4个dataframes
for (i in test){
i<-i%>%distinct(FileNumber)%>%nrow()
print(i)
}
运行此命令时,我得到以下输出
[1] 38
[1] 129
[1] 1868
[1] 277
但是我希望将此输出保存到另一个称为my_vector的向量中。这样my_vector
是
38 129 1868 277
所以我根据发现的答案尝试了以下方法 Saving results from for loop as a vector in r
library(dplyr)
my_vector<-vector("numeric",4L)
for (i in test){
my_vector[i]<-i%>%distinct(FileNumber)%>%nrow()
}
但是,当我运行此程序时,会收到以下消息
Error in my_vector[i] <- i %>% distinct(FileNumber) %>% nrow() :
invalid subscript type 'list'
如何将列出的较早输出保存到向量中?
答案 0 :(得分:1)
您正在尝试使用类似my_vector
的对象为list
编制索引。
例如:
mylist <- list(mtcars, mtcars)
myvec <- numeric(length(mylist))
for (i in mylist) {
myvec[i] <- nrow(distinct(i, cyl))
}
在第一次(本例中为第二次)迭代中,i
是一个帧,因此myvec[i]
等效于myvec[mtcars]
,这没有意义。
相反,循环遍历帧列表的 index ,
library(dplyr)
mylist <- list(mtcars, mtcars)
myvec <- numeric(length(mylist))
for (i in seq_len(length(mylist))) {
myvec[i] <- test[[i]] %>% distinct(cyl) %>% nrow()
}
myvec
# [1] 3 3
或者只是做类似的事情:
sapply(mylist, function(l) l %>% distinct(cyl) %>% nrow())
# [1] 3 3
顺便说一句:在base-R中,这与以下操作一样简单:
sapply(mylist, function(l) length(unique(l[["cyl"]])))
# [1] 3 3
答案 1 :(得分:1)
这应该适用于数据帧或矩阵列表
d <- list(a = matrix(rnorm(100), nrow = 20),
b = matrix(rnorm(100), nrow = 10),
c = matrix(rnorm(100), nrow = 50))
my_vect <- c()
for (i in seq_along(d)){
n <- nrow(d[[i]])
my_vect[i] <- n
}
my_vect
[1] 20 10 50
答案 2 :(得分:-1)
使用unlist()
,如果不起作用,则在管道中添加as.vector()
:
for (i in test){
i<-i %>% distinct(FileNumber) %>% nrow() %>% unlist()
print(i)
}
如果那不是作为矢量出现的,则:
for (i in test){
i<-i %>% distinct(FileNumber) %>% nrow() %>% unlist() %>% as.vector()
print(i)
}