【发布时间】:2017-09-01 16:56:57
【问题描述】:
我在 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 将其标记为“奇数”。如果数据帧的行数是偶数,我只希望 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'
>
关于为什么会发生这种情况以及如何解决它的任何想法?谢谢
【问题讨论】:
-
你是想给它命名吗?
-
我认为你的本意是
lapply(seq_along(dflist), ...) -
@akrun - 效果很好。谢谢!我不知道怎么做,但我很高兴它做到了。
-
@dcoss 原因是您正在检查 nrow 是奇数还是偶数,并且该逻辑条件的输出长度为 1。对于这些情况,可以使用
if/else。ifelse在长度大于1时使用。
标签: r list if-statement dataframe lapply