阻止 apply 返回向量?

Preventing apply from returning a vector?

我是 运行 通过一系列看起来像下面代码的 apply() 调用的大量具有可变维度的数据框。

df1 = t(data.frame('test'=c(0,0,1,0)))
df1 = apply(df1,2,function(j){sub(0,'00',j)})
df1 = apply(df1,2,function(j){sub(1,'01',j)})
df1 = apply(df1,2,function(j){sub(2,'10',j)})
df1

在极少数情况下,数据框的大小为 1xn,第一次 apply() 调用将导致它 return 向量数据类型,并导致后续应用出错。请注意,此问题似乎不会出现在 1xn 数据帧中(在上面的代码中,删除 t())。是否有任何 quick/clean 方法来阻止 apply() returning 向量或针对此问题的其他有效解决方法?

我认为当 1xn 但没有 nx1 数据帧用作输入时,以下可能有效。

df1 = apply(df1,1,function(j){sub(0,'00',j)})
df1 = apply(df1,2,function(j){sub(1,'01',j)})
df1 = apply(df1,2,function(j){sub(2,'10',j)})
t(ret)

下面保留了原来的数据结构。是要找的吗?

df = data.frame('test'=c(0,0,1,0))
df[] <- apply(df,2,function(j){sub(0,'00',j)})
df[] <- apply(df,2,function(j){sub(1,'01',j)})
df[] <- apply(df,2,function(j){sub(2,'10',j)})
df
#   test
# 1   00
# 2   00
# 3   01
# 4   00

df1 = t(data.frame('test'=c(0,0,1,0)))
df1[] <- apply(df1,2,function(j){sub(0,'00',j)})
df1[] <- apply(df1,2,function(j){sub(1,'01',j)})
df1[] <- apply(df1,2,function(j){sub(2,'10',j)})
df1
# [,1] [,2] [,3] [,4]
# test "00" "00" "01" "00"