将R加载脚本对象到工作区间

8
这是一个我似乎无法解决的新手问题。假设您已经编写了一个操作几个数据框的R脚本,运行脚本后会打印出结果。一切都很好。如何将在脚本中创建的对象加载到工作区中呢?例如,假设脚本创建了数据框df1。我们如何在工作区中访问它?谢谢。
以下是脚本...简单的函数只读取csv文件并计算第2列和第3列之间的差异...基本上我想在工作区中访问spdat。
mspreaddata<-function(filename){

# read csv file
rdat<-read.csv(filename,header=T,sep=",")


# compute spread value column 2-3
spdat$sp<-rdat[,2]-rdat[,3]
}

1
请问您能否提供一个简化的示例脚本? - janos
2个回答

26
你应该使用 source 函数。
例如:使用 source("script.R") 编辑:
查看相关文档获取更多细节。它将运行你调用的脚本。对象将会在你的工作区中。
或者,你可以使用 save 来保存这些对象,然后使用 load 加载它们。

是的,我正在调用该函数并运行它...脚本运行了该函数,但由于某种原因,数据文件没有加载到工作区。 - user2238328
然后您需要向我们展示一个可重现的例子。您创建的对象可能是临时的,而不在正确的环境中。 - stanekam
好的,我已经发布了上面的示例函数...问题是如何访问创建的“spdat”函数。 - user2238328
那么当你引用它时,函数“mspreaddata”在你的工作空间中不可用? - stanekam
我使用的是RStudio。函数名称出现在工作区中,但使用该函数创建的任何数据框都没有加载。我尝试了几个其他示例函数,结果也是一样的。这不正常吧? - user2238328
请查看我的新答案。如果这仍然对您不起作用,您是否收到了错误消息?您的代码可能存在错误。我刚刚做了这个,它在我的rstudio中运行良好。 - stanekam

1
当您获取源代码时,函数mspreaddata在您的工作区中不可用吗?因为在那里没有创建spdat。您只是创建了一个函数而没有运行它。该对象spdat仅存在于该函数内部,而不在任何外部环境中。您应该添加类似于...的内容。
newObject <- mspreaddata("filename.csv")

然后你可以访问newObject 编辑:
还有一种情况是,在您的函数中未创建spdat,因此调用spdat$sp<-rdat[,2]-rdat[,3]本身就是不正确的。只需使用return(rdat[,2]-rdat[,3])即可。

我明白了,所以函数中的对象是局部的,需要调用 return 来明确地使对象可用。感谢您的澄清。 - user2238328
是的!请随意点赞并选择它作为答案 ;) - stanekam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接