gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:30:33 28 4
gpt4 key购买 nike

我找到了 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com