readtable不读逻辑值
31日视图(30天)
显示旧的评论
我用的版本9.9.0.1592791 (R2020b)更新5。
我发现这种行为虽然读写表通过readtable()和writetable ()。
%首先,我做一个表并将它写入文件:
敏= 1;
mychar = {' 1 '};
mybool = true;
t =表();
t = addvars (t,敏);
t = addvars (t, mychar);
t = addvars (t, mybool)
writetable (t)“mytable.csv”);
%这给表t:
% {
t =
1×3表
敏mychar mybool
_____交
1{' 1 '}真的
%}
% . csv文件:
% {
敏,mychar mybool
1,1,1
%}
%注意,“真正的”写成“1”预计
%现在,我试着读表,正确设置选项:
选择= detectImportOptions (“mytable.csv”);
选择= setvartype(选择,“敏”,“int8”);
选择= setvartype(选择,“mychar”,“字符”);
选择= setvartype(选择,“mybool”,“逻辑”);
t = readtable (“mytable.csv”选择)
%,而不是预期的结果的表值1(整数),“1”(一个字符),和真正的(逻辑),得到:
% {
t =
1×3表
敏mychar mybool
_____交
1{' 1 '}假
%}
%当我改变我的文件:
% {
敏,mychar mybool
1,1,真的
%}
% readtable()读取数据如预期,给:
% {
t =
1×3表
int char bool
___ _____ _____
1{' 1 '}真的
%}
为什么会这样?这是意想不到的,特别是考虑到writetable写逻辑值为“0”和“1”。这是预期的或这是一个错误吗?
注意:当我使用xls . csv,而是它的行为。
接受的答案
杰里米·休斯
2021年8月10日
编辑:杰里米·休斯
2021年8月10日
默认的结果
detectImportOptions
看到
“1”
&
“0”
将数值,默认逻辑阅读期待
“真正的”、“t”
或
“假”、“f”
(不分大小写),但这是重写的。
T = array2table (randn (6,3) > 0)
writetable (T)“mytable.csv”,“WriteVariableNames”假)
选择= delimitedTextImportOptions (“NumVariables”3,…
“VariableNames”,(“敏”,“mychar”,“mybool”),…
“VariableTypes”,(“int8”,“字符”,“逻辑”]);
getvaropts(选择,“mybool”)
你可以当作什么
真正的
或
假
真与假的符号。
选择= setvaropts(选择,“mybool”,…
“TrueSymbols”,(“t”,“真正的”,“1”),…
“FalseSymbols”,(“f”,“假”,“0”]);
t = readtable (“mytable.csv”选择)
注意:
这只会匹配0和1,不像假的“0.0”或“2”没错,但大多数情况下应该足够了。
11日评论
杰里米·休斯
2022年6月21日
嗨,案件的快速关闭的原因是报告系统中已经存在,不认为是一个错误。你的期望和该特性不一致的设计,但它的工作是设计。这是,至少从“政策”的角度来看,这是一个增强的原因。不幸的是,改变默认的行为将导致沉默更改现有使用预计当前的行为。我意识到这并不是最令人满意的答案。
根据你的期望,而不是“逻辑”你最好继续把它看作一个进口数量(uint8也许),,然后把它。没有任何性能的影响,只是一条线:
t。mybool =逻辑(t.mybool)
只要没有工作的“T”或“真”值。范式的逻辑表示需要一致的文件中至少,或者是没有希望的。