R data.table 分配单行列表类型列

标签 r data.table

我找到了 data.table 的逻辑以下两个操作不一致:

操作1:

df1<-data.table(a=c(1,2))
list1<-list(c(1,2), 1)
df1[,b:=list1]

#> df1
#   a   b
#1: 1 1,2
#2: 2   1

操作 2:(data.table 将单例列表视为我提供了一个向量)
df2<-data.table(a=c(1))
list2<-list(c(1,2))
df2[, b:=list2]
#Warning message:
#In `[.data.table`(df2, , `:=`(b, list2)) :
#  Supplied 2 items to be assigned to 1 items of column 'b' (1 unused)
#> df2
   a b
#1: 1 1

我希望第二种情况下的输出是:
#   a   b
#1: 1 1,2

我可以统一这两种情况:
df1[, b:=list(list1)]
df2[, b:=list(list2)]

这是最好的解决方案吗? data.table 是否没有选项可以不取消嵌套单例列表?当我使用 b:=list(list1) 时,在第一种情况下是否没有额外的性能操作?

最佳答案

https://stackoverflow.com/a/54797914/2490497 复制我的回答
我不能建议重复,因为“这个问题没有被赞成或接受的答案
”。

这是一个很好的问题,涉及 := 的设计决策运算符(operator)。

对于使用 := 的简单调用作为运算符,如 col := val ,我们决定包装 val自动进入列表。做出此决定是为了让用户更方便地分配单列。

当您使用函数调用形式时,":="(col = val)我们不包装 val不再列入名单。它已经是扩展形式。 :=充当 list 的别名但就地更新。您可以随时通过更改 := 来检查更新的列。进入 list (或 .)喜欢 .(col = val) .

即使使用 := 也不是这样作为运算符(operator),您仍然必须提供 RHS 作为您正在创建 2+ 列的列表,c("col1","col2") := list(val1, val2) .

关于R data.table 分配单行列表类型列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53541376/

相关文章:

r - Roxygen 可以忽略非用户功能吗?

r - 合并和替换两个 data.tables 中的值

R:根据行范围选择行值

r - 使用线性回归对 data.table 进行预测

R data.table 最后一行索引快捷方式

r - 性能:结合大数据表

r - 使用 ggplot2 进行逻辑回归 + 直方图

r - 如何从一个 data.table 中删除另一个 data.table 中指定的组组合 [R]

r - 使用 .SD 和 by 的 data.table 性能

r - 如何获取函数使用的参数的列表?