考虑以下模拟代码片段:
为什么这段代码会抛出错误(dsts 是矩阵):
但不是这个(将矩阵强制转换为数据框):
错误出现在这一行的
这是应该向R Core报告的错误吗?
k <- 1:5
x <- seq(0,10,length.out = 100)
dsts <- lapply(1:length(k), function(i) cbind(x=x, distri=dchisq(x,k[i]),i) )
dsts <- do.call(rbind,dsts)
为什么这段代码会抛出错误(dsts 是矩阵):
subset(dsts,i==1)
#Error in subset.matrix(dsts, i == 1) : object 'i' not found
甚至包括这一个:
colnames(dsts)[3] <- 'iii'
subset(dsts,iii==1)
但不是这个(将矩阵强制转换为数据框):
subset(as.data.frame(dsts),i==1)
这个示例可以在 x
已经被定义的情况下工作:
subset(dsts,x> 500)
错误出现在这一行的
subset.matrix()
函数中:else if (!is.logical(subset))
这是应该向R Core报告的错误吗?
这是一个方便的函数,旨在用于交互使用。 对于编程而言,最好使用标准的子集函数(如[),特别是参数子集的非标准评估可能会产生意想不到的后果。
- Roman Luštrikcbind.data.frame
更加明确。 - MrFlick