小例子:
library(data.table)
l <- list(data.table(a=c("a", "b", "c"), b=c(1, 2, 3)),
data.table(),
data.table(d=c("x", "y", "z"), e=c(9, 8, 7))
)
> l
[[1]]
a b
1: a 1
2: b 2
3: c 3
[[2]]
Null data.table (0 rows and 0 cols)
[[3]]
d e
1: x 9
2: y 8
3: z 7
在制作中,我有这个清单:
[[3]]
rn blogs news twitter count qmle
1: almost feel like 1 1 1 3 0.5
[[4]]
Empty data.table (0 rows) of 5 cols: rn,blogs,news,twitter,count
l[[2]]
与生产中的[[3]]
相同吗?
另外,我想压缩列表,这样只保留data.tables,它们分别不是NULL或空。我该怎么做?
我尝试使用Filter
,但空数据表仍保留在列表中。
> Filter(length, x[386:390])
[[1]]
Empty data.table (0 rows) of 5 cols: rn,blogs,news,twitter,count
[[2]]
rn blogs news twitter count qmle
1: almost every day 12 2 1 15 0.25423729
2: almost everything else 2 2 1 5 0.08474576
[[3]]
rn blogs news twitter count qmle
1: almost everything else 2 2 1 5 0.5
[[4]]
rn blogs news twitter count qmle
1: almost feel like 1 1 1 3 0.5
[[5]]
Empty data.table (0 rows) of 5 cols: rn,blogs,news,twitter,count
答案 0 :(得分:2)
您可以使用nrow
过滤列表元素并使用NULL
。这应该适用于empty
以及length
data.table。在第一种情况下,我建议str(l[[4]])
,但如果我们查看length
,它仍然有五列,每行0行。因此,ncol
会给length
ie。 5我们在Filter
中使用nrow
时也会包含它。然而,empty
为NULL,0
为Filter
。在 Filter(nrow, l)
#[[1]]
# a b
#1: a 1
#2: b 2
#3: c 3
#[[2]]
# d e
#1: x 9
#2: y 8
#3: z 7
内,0将被强制为'FALSE'而其他所有内容将被强制为'TRUE'。
l[[4]] <- as.data.table(matrix(, ncol=5, nrow=0))
using MbnApi;
using System;
namespace GetSmsStatusTest
{
class Program
{
static void Main(string[] args)
{
GetSmsStatus(args[0]);
}
static void GetSmsStatus(string interfaceID)
{
try
{
MbnInterfaceManager mbnInfMgr = new MbnInterfaceManager();
IMbnInterfaceManager infManager = (IMbnInterfaceManager)mbnInfMgr;
//obtain the IMbnInterface passing interfaceID
IMbnInterface mbnInterface = infManager.GetInterface(interfaceID);
IMbnSms mbnSms = mbnInterface as IMbnSms;
if (mbnSms == null)
{
Console.WriteLine("Got no IMbnSms");
return;
}
MBN_SMS_STATUS_INFO mbnSmsStatusInfo;
mbnSms.GetSmsStatus(out mbnSmsStatusInfo);
Console.WriteLine("flag={0}, index={1}", mbnSmsStatusInfo.flag, mbnSmsStatusInfo.messageIndex);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}