我有如下所示的样本数据
Die Device Id Vg W L
1 Device1 1 0 10 1
1 Device1 1.2 0.1 10 1
1 Device1 1.3 0.2 10 1
1 Device2 1 0 10 2
1 Device2 1.2 0.1 10 2
1 Device2 1.3 0.2 10 2
1 Device3 1 0 10 3
1 Device3 1.2 0.1 10 3
1 Device3 1.3 0.2 10 3
输出输出:
data_tidy <- structure(list(Die = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Device = c("Device1",
"Device1", "Device1", "Device2", "Device2", "Device2", "Device3",
"Device3", "Device3"), Id = c(1, 1.2, 1.3, 1, 1.2, 1.3, 1, 1.2,
1.3), Vg = c(0, 0.1, 0.2, 0, 0.1, 0.2, 0, 0.1, 0.2), W = c(10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L), L = c(1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L)), .Names = c("Die", "Device", "Id", "Vg",
"W", "L"), class = "data.frame", row.names = c(NA, -9L))
我正在使用以下代码在指定的Vg
处插入Id
的值。
data_tidy %>% group_by(Die,Device) %>%
mutate(Vt=approx(x=log10(Id), y=Vg, xout=log10(3e-8*W/L))$y)
我收到错误说
错误:无效的下标类型'double'
我很惊讶因为几天前我能够编译这段代码而没有任何错误。我还讨论了论坛here上的代码。我不确定是什么问题。任何帮助将不胜感激。
答案 0 :(得分:3)
我认为问题是如果我们破坏代码,你会尝试执行以下操作。
Vt
是
Vt=approx(x=log10(data_tidy$Id),y=data_tidy$Vg,
xout=log10(3e-8*(data_tidy$W)/(data_tidy$L)))
这会将Vt
作为
> Vt
$x
[1] -6.522879 -6.522879 -6.522879 -6.823909 -6.823909 -6.823909 -7.000000 -7.000000
[9] -7.000000
$y
[1] NA NA NA NA NA NA NA NA NA
现在使用组合代码我认为您正在尝试访问x
而不是y
> data_tidy%>%
+ group_by(Die,Device)%>% #Die is numeric, Device is factor
+ mutate(Vt=(approx(x=log10(Id),y=Vg,xout=log10(3e-8*W/L)))$x)
Error: invalid subscript type 'double'
您正试图通过mutate中double类型的下标来下标列表,这会导致此问题。如果您希望x
的{{1}}元素发生变异。使用
Vt
这应该有用。
答案 1 :(得分:3)
这里有一个使用单个脚本的解决方案:
https://github.com/hadley/dplyr/issues/1554
dplyr::mutate(df, newColumn = someVariable$'a')