以下是data.table
示例。
set.seed(123)
mydt <- data.table(id = 1:100, x = sample(LETTERS[1:6], size = 100, replace = TRUE), group = paste0("group", sample(1:3, size = 100, replace = TRUE)), prob = runif(100, 0, 1))
我使用tydir::spread
从长格式转到宽格式
mydt2 <- mydt %>% spread(group, prob)
然后我想在
中定义新列mydt2[!is.na(group1), new.col := x]
如果我这样做,我会收到以下警告
Warning message:
In `[.data.table`(mydt2, !is.na(group1), `:=`(myscale, x)) :
Invalid .internal.selfref detected and fixed by taking a (shallow) copy
等,如果我改为运行
mydt2 <- copy(mydt %>% spread(group, prob))
mydt2[!is.na(group1), myscale := x]
我没有得到任何警告。我不明白这种行为。有人可以提供帮助吗?是否正确使用copy()
解决此问题?
答案 0 :(得分:0)
我认为使用private void CopyScreen()
{
var picBox = pictureBox;
var bit = new Bitmap(this.Width, this.Height);
using (var g = Graphics.FromImage(bit))
{
var upperLeftSource = new Point(
Screen.PrimaryScreen.Bounds.Width / 2 - this.Width / 2,
Screen.PrimaryScreen.Bounds.Height / 2 - this.Height / 2);
g.CopyFromScreen(upperLeftSource, new Point(0, 0), bit.Size);
var oldImage = picBox.Image;
picBox.Image = bit;
oldImage?.Dispose();
}
}
是可行的方法。但是,使用dcast
的可能解决方案是将tidyr::spread
添加到管道呼叫,即
setDT()