我的一些代码出了问题并修复了它,但没有完全理解为什么错误是错误
代码看起来像:
for(i in 1:3){df = rbind.fill(z, data.frame(id=i,
data=if(is.null(x$results[[i]]$synopsis$data))
{NA}else{x$results[[i]]$synopsis$data}))}
我遇到的问题是,如果第一个数据值确实为空,我会得到NA
,但是对于第二个和第三个,我会得到另一个NA
或者如果有数据我不会得到它,我会得到1
。
如果第一个值是数据,那么我会得到数据,而对于其他两个,我会得到NA
或正确的数据。
我不是计算机科学家,但是坐在我附近的开发人员(但不知道R)表明它与NA
和字符串的不同类型转换有关。为了解决这个问题,我将NA
更改为"0"
(我认为"NA"
也可以。)
我想对发生的事情做一个更全面的解释。我的外行人的理解是,如果NA
是第一个结果,那么每个结果都是在“格式”中,其中某些内容是NA
或不是1
而不是my.list <- list(list(),structure(
list(
experience = structure(
list(
start = "Hi"
),.Names = c("start")),
`_meta` = structure(
list(weight = 1L, `_sources` = list(structure(
list(`_origin` = "a"), .Names = "_origin"
))),.Names = c("weight", "_sources"))),.Names = c("experience", "_meta")))
my.list[[1]]$experience$start
NULL
my.list[[2]]$experience$start
[1] "Hi"
df <- NULL
for(i in 1:2){df = rbind.fill(df, data.frame(id=i,
data=if(is.null(my.list[[i]]$experience$start))
{NA}else{my.list[[i]]$experience$start}))}
,这有点像布尔响应?
示例:
df2 <- NULL
for(i in 1:2){df2 = rbind.fill(df2, data.frame(id=i,
data=if(is.null(my.list[[i]]$experience$start))
{"NA"}else{my.list[[i]]$experience$start}))}
然后
df: df2:
id data id data
1 NA 1 NA
2 1 2 HI
结果:
<input type="date">
答案 0 :(得分:1)
data
的列df
的类。
在方案1中,您可以通过逐步完成循环来获得更好的想法:
df <- NULL
i=1
df = rbind.fill(df, data.frame(id=i,
data=if(is.null(my.list[[i]]]$experience$start)) {NA}
else{my.list[[i]]$experience$start}))
df
id data
1 1 NA
然后,看看df$data
class(df$data)
[1] "logical"
源自:mode(NA)
(逻辑)。
另一种方法是,当您将实验集中的相关数据存储在列表中时,您应该尝试使用“R-ish”方式来操作此列表。
例如,您可以尝试:
sapply(my.list, FUN=function(element)element$experience$start)
[[1]]
NULL
[[2]]
[1] "Hi"
您强调尝试收集不兼容内容集合的重点:简化不能比此列表更简单 - 如果您unlist
您会忽略这个有意义的NULL