我有以下DF:
> str(fngr_rain)
'data.frame': 80 obs. of 9 variables:
$ CRP: int 0 0 0 0 0 0 0 0 0 0 ...
$ CRO: int 0 0 0 0 0 0 0 0 0 0 ...
$ EPR: int 1 1 0 0 1 1 1 1 1 0 ...
$ EPO: int 1 1 1 1 1 1 1 1 1 1 ...
$ ARB: int 0 0 0 0 0 0 0 0 0 0 ...
$ OPP: int 1 0 1 1 1 1 1 1 0 1 ...
$ AAT: int 0 0 0 0 0 0 0 0 0 0 ...
$ LCA: int 1 0 0 0 0 0 0 0 0 0 ...
$ ATN: int 0 0 0 0 0 0 0 0 0 0 ...
我想创建一个函数,该函数生成此DF的colSums的向量。问题是:我需要向量只有colSums的值大于4.所以,而不是:
> colSums(fngr_rain)
CRP CRO EPR EPO ARB OPP AAT LCA ATN
3 0 48 80 3 51 1 25 0
我想要以下矢量:
> vector1 <- c("EPR" = 48, "EPO" = 80, "OPP" = 51, "LCA" = 25)
> vector1
EPR EPO OPP LCA
48 80 51 25
我正在尝试这样的事情:
> my_fun = function(x) {
+ sapply(as.vector(colSums(x)), function(x){
+ if(x >= 4) assign("my_vec", x, envir = .GlobalEnv)
+ }
+ )
+ }
> my_fun(fngr_rain)
[[1]]
[1] 3
[[2]]
[1] 0
[[3]]
NULL
[[4]]
NULL
[[5]]
[1] 3
[[6]]
NULL
[[7]]
[1] 1
[[8]]
NULL
[[9]]
[1] 0
编辑: 它返回一个带向量的列表。然后我可以使用unlist()获取向量(如注释中所示)
unlist(my_fun(fngr_rain))
[1] 3 0 3 1 0
但是,我仍然希望将矢量存储在一个对象中。我尝试在我的功能中这样做,但是&#34; my_vec&#34;我创建的对象不会返回向量:
> my_vec
[1] 0
任何帮助表示赞赏!
答案 0 :(得分:2)
也许
colSums(fngr_rain)[colSums(fngr_rain)>4]