ROracle在R中创建阴影或不可见列

问题描述 投票:0回答:1

[使用与ROracle一起读入Rstudio服务器的data.frame,我遇到了一些非常奇怪的行为。数据中似乎有一个额外的列,R最初似乎没有被检测到,但在那里仍然很多。

我以前并不了解oracle的隐藏字段,并且偶然发现了这可以解释这种现象。What are Oracle hidden fields?

但是,对于我来说,这仍然非常奇怪,因为在R中这甚至是可能的,并且不一致之处令人困惑。当然,该示例不可复制,因为它基于特定的oracle数据集,该数据集已使用dbReadTable成功加载到R中。我只想向使用ROracle的任何人强调这一点,那就是您可以进入Rstudio以及从Rstudio角度将隐藏列加载到R时的样子。

有人可以解释$运算符和[[]]或exist()之间的固有区别是什么,为什么$运算符似乎是检测此列的唯一方法

> EXAMPLE_TABLE <-
+   dbReadTable(
+     con_ROracle,
+     schema  = SCHEMA_NR,
+     name  = TABLE_NAME) %>%
+   head(100)
> 
> # names doesn't find the column
> 
> "L" %in% names(EXAMPLE_TABLE)
[1] FALSE
> 
> # subsetting with [["L"]] doesn't find it
> EXAMPLE_TABLE[["L"]]
NULL
> 
> # the function "exists" doesn't find it
> 
> exists("L", EXAMPLE_TABLE)
[1] FALSE
> 
> # dplyr selection doesn't find it
> 
> EXAMPLE_TABLE %>% 
+   select(L)
Error: Can't subset columns that don't exist.
x The column `L` doesn't exist.
Run `rlang::last_error()` to see where the error occurred.
> 
> # But the $ operator does find it!
> EXAMPLE_TABLE$L 
  [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 [53]  1  1  1  1  1  1  1  1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
> 
> # And  replacing it with a NULL value doesn't work 
> 
> EXAMPLE_TABLE$L <- NULL
> EXAMPLE_TABLE$L 
  [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 [53]  1  1  1  1  1  1  1  1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
> 
> # The values of the hidden field are accesible 
> new_value <- EXAMPLE_TABLE$L
> new_value
  [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 [53]  1  1  1  1  1  1  1  1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
> 
> 
> # Only replacing with new values helps
> 
> EXAMPLE_TABLE$L <- 5
> EXAMPLE_TABLE$L
  [1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
 [79] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5

>

奇怪的是,隐藏列不能用

oracle rstudio hidden-field rstudio-server roracle
1个回答
0
投票

使用$选择列时,它不需要完全匹配。您必须有一个名称以L开头的列,这是唯一以L开头的列。

© www.soinside.com 2019 - 2024. All rights reserved.