我在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 回答
如果我们需要返回"ODD"或数据集,那么使用
if/else
数据
当您使用lapply时,您只需引用匿名函数的参数,而不是原始列表名称 . 所以不要这样做:
您只需要更改以引用您在函数中放入的列表项,即“x”;所以它应该是: