阻止 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"
我是 运行 通过一系列看起来像下面代码的 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"