在R语言中,我想在脚本的末尾检索一个全局变量列表,并将其覆盖。
#declare a few sample variables
a<-10
b<-"Hello world"
c<-data.frame()
#get all global variables in script and iterate over them
myGlobals<-objects()
for(i in myGlobals){
print(typeof(i)) #prints 'character'
}
字符串
我的问题是typeof(i)
总是返回character
,即使变量a
和c
不是字符变量。我如何才能在for循环中获得变量的原始类型?
7条答案
按热度按时间0s0u357o1#
您需要使用
get
来获取值,而不是ls
返回的对象的字符名称:字符串
或者,对于所呈现的问题,您可能希望使用
eapply
:型
erhoui1w2#
R/Rscript没有具体的数据库。
R解释器有一个duck类型的内存分配系统。没有内置的方法来告诉你指向内存的指针的数据类型。Duck类型是为了提高速度,但事实证明这是一个坏主意,因为现在这样的语句:
print(is.integer(5))
返回TRUE,is.integer(as.integer(5))
返回TRUE。关于基本类型的R手册:https://cran.r-project.org/doc/manuals/R-lang.html#Basic-types
你所能期望的最好的结果就是编写自己的函数来探测你的内存指针,然后使用消除过程来决定它是否适合你的需要。
如果你的变量是一个全局变量或对象:
您的
object()
需要用get(...)
穿透,然后才能看到内部。示例:字符串
typeof(...)探测变量指针到内存:
例如,R函数
typeof
有一个偏置,可以给予最大深度的类型。型
class(...)探测变量指针到内存:
例如,Rx 1 e0f1x偏向于给予封装类型的容器或结构的类型。
型
获取变量的数据
storage.mode
:当一个R变量被写入磁盘时,数据布局再次改变,称为data's
storage.mode
。函数storage.mode(...)
揭示了这一低级信息:参见Mode, Class, and Type of R objects。你不需要担心R的storage.mode,除非你试图理解在向磁盘分配和从磁盘阅读数据时发生的往返转换/转换所导致的延迟。Demo:R/Rscript
gettype(your_variable)
:运行这段R代码,然后根据你的目的调整它,它会很好地猜测它是什么类型。
型
我在这里引入了C++/Java/Python的思想,让我了解了内存的最大值是什么。R triad类型系统就像试图将意大利面条钉在墙上,
<-
和<<-
会在你最不怀疑的时候将你的矩阵打包成一个列表。正如古老的鸭子类型谚语所说:如果它像鸭子一样摇摆,如果它像鸭子一样嘎嘎叫,如果它有羽毛,那么它就是鸭子。nx7onnlm3#
你可以使用class(x)来检查变量类型。如果要求检查 Dataframe 的所有变量类型,那么可以使用sapply(x,class)。
svmlkihl4#
字符串
我尝试了
class
和typeof
函数,但都失败了。slsn1g295#
设计来做你想要的基本上相反的事情,这是我的工具箱玩具之一:
字符串
zvokhttg6#
lapply(your_frame,class)提供类似于以下内容的内容:
$tikr [1]“factor”
$Date [1]“日期”
$Open [1]“numeric”
$High [1]“numeric”
等等
tktrz96b7#
字符串
我不能评论前面的答案,然而,这是我发现的最好的快捷方式.为了执行上面的代码,请确保您有包“dupir”或“magrittr”或“tidyverse”与“tidyr”一起安装沿着,并启动相应的库.