首页 文章

在R中使用lapply和ifelse函数

提问于
浏览
1

我在R中有一个问题,我可以在列表中的元素上运行ifelse语句,但是只要我将ifelse语句放在lapply函数中,它就不再有效 .

这是我的例子 . 我正在处理三个数据帧的列表:

> dflist
[[1]]
  ID1 tID1
1  m1    1
2  m2    2
3  m3    3
4  m4    4
5  m5    5

[[2]]
  ID2 tID2
1  m7    7
2  m8    8
3  m9    9
4 m10   10
5 m11   11

[[3]]
  ID3 tID3
1 m13   13
2 m14   14
3 m15   15
4 m16   16
5 m17   17
6 m18   18

如果数据帧具有奇数行,我希望R将其标记为“ODD” . 如果数据帧具有偶数行,我只想让R输出相同的数据帧 . 我想输出是一个列表 .

这在我编写独立的ifelse语句时有效:

> ifelse(nrow(dflist[[1]])%%2==!0, "ODD", dflist[1])
[1] "ODD"

> ifelse(nrow(dflist[[3]])%%2==!0, "ODD", dflist[3])
[[1]]
  ID3 tID3
1 m13   13
2 m14   14
3 m15   15
4 m16   16
5 m17   17
6 m18   18

但是,一旦我把它写成一个lapply语句,我就收到一条错误消息 .

> lapply(dflist, function(x) ifelse(nrow(dflist[[x]])%%2==!0, "ODD", dflist[x]))

 Error in dflist[[x]] : invalid subscript type 'list' 
>

为什么会发生这种情况以及如何解决它的任何想法?谢谢

2 回答

  • 0

    如果我们需要返回"ODD"或数据集,那么使用 if/else

    lapply(dflist, function(x) if(nrow(x)%%2==1) "ODD" else x)
    

    数据

    dflist <- list(data.frame(col1 = 1:3, col2=4:6), data.frame(col1=1:4, col2=5:8))
    
  • 1

    当您使用lapply时,您只需引用匿名函数的参数,而不是原始列表名称 . 所以不要这样做:

    lapply(dflist, function(x) ifelse(nrow(dflist[[x]])%%2==!0, "ODD", dflist[x]))
    

    您只需要更改以引用您在函数中放入的列表项,即“x”;所以它应该是:

    lapply(dflist, function(x) ifelse(nrow(x)%%2==!0, "ODD", x))
    

相关问题