将输出保存到R中的向量中?

时间:2019-04-01 16:14:00

标签: r

我具有以下功能,可以找到属于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'

如何将列出的较早输出保存到向量中?

3 个答案:

答案 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)
}