R当列表为单数时,意外行为将列表转换为data.table

R当列表为单数时,意外行为将列表转换为data.table,r,data.table,R,Data.table,我正在与一家本地回购公司合作,无意中发现了一件让我对列表索引理解混乱的事情 as.data.table( available.packages(url, type="win.binary")[, c("Package","Version","Depends","Repository")] ) 如果“url”处的回购协议有多个包,我会得到预期的结果: Package Version Depends

我正在与一家本地回购公司合作,无意中发现了一件让我对列表索引理解混乱的事情

as.data.table(
 available.packages(url, type="win.binary")[, c("Package","Version","Depends","Repository")]
)
如果“url”处的回购协议有多个包,我会得到预期的结果:

     Package  Version       Depends                                     Repository
1: truncnorm   1.0-7  R (>= 2.15.0)        file:///D:/Repo/bin/windows/contrib/3.3
2:     yacca   1.1    R (>= 1.8.0), utils  file:///D:/Repo/bin/windows/contrib/3.3
但当回购协议只有一个组合时:

                                        V1
1:                               truncnorm
2:                                   1.0-7
3:                           R (>= 2.15.0)
4: file:///D:/Repo/bin/windows/contrib/3.3
它似乎已将列表行转换为列。为什么它将单个列表组件视为一个向量(或者正在进行其他操作)

由@lmo回答

默认情况下,如果维度是冗余的,R将折叠该维度。 要停止此行为,请使用drop=FALSE选项

available.packages(url, type="win.binary")[, c("Package","Version","Depends","Repository"), drop=FALSE]
由@lmo回答

默认情况下,如果维度是冗余的,R将折叠该维度。 要停止此行为,请使用drop=FALSE选项

available.packages(url, type="win.binary")[, c("Package","Version","Depends","Repository"), drop=FALSE]

我怀疑当您调用或子集
available.packages
时,会发生这种转换。它不返回字符矩阵,而是返回字符向量。R定期进行这种简化。如果您不希望出现这种行为,
available.packages(url,type=“win.binary”)[,c(“Package”、“Version”、“dependens”、“Repository”),drop=FALSE]
可能会起作用。请参阅
帮助(“[”)
有关drop Arguments的更多信息,谢谢@lmo,该帮助页正是我需要指出的。@ShayneH您可以自行回答问题,或者简单地删除它。我怀疑在调用或子集
available.packages
时发生了此转换。它返回的不是字符矩阵,而是字符vector.R定期进行这种简化。如果您不希望出现这种行为,
可用。包(url,type=“win.binary”)[,c(“包”、“版本”、“依赖”、“存储库”),drop=FALSE]
可能会起作用。请参阅
帮助([”)
有关drop Arguments的更多信息,谢谢@lmo,该帮助页正是我需要指出的地方。@ShayneH您可以自行回答问题,也可以直接删除它