如何避免硬编码文件路径?(How can I avoid hardcoding a file path?)
我正在使用RStudio来编织
.Rnw
文件。.Rnw
文件存储在git版本控制下的目录中。 该目录还包含项目的.RProj
文件。我与不了解
.Rnw
文件和git的第一件事的同事合作。 这些同事想要打开一个Word文件并跟踪改变他们的心。 所以我给人们他们想要的东西。每个人都需要访问权限,因此将Word文件存储在像Box这样的云服务上是有道理的。 在过去,我在我的仓库中创建了一个子文件夹,我共享 - 保留根目录中的所有内容 - 但这次我需要将文件存储在其他人创建的共享文件夹中。 所以我的解决方案是将Word文件从这个共享目录复制到我的存储库。
技术方法
我不知道如何使这成为一个可重现的问题,但希望你能给我一些自由,因为我正努力使我的作品完全可重复;)
假设我的
.Rnw
文件存储在repoRoot/subfolder
。 由于knitr
将工作目录更改为此.Rnw
文件所在的subfolder
,因此第一个块将root.dir
设置为项目根目录的一级。<<knitr, include=FALSE>>= library(knitr) opts_knit$set(root.dir=normalizePath('../')) # go up 1 level @
下一个块将Word文件从共享文件夹复制到我的git repo并运行分析文件。 共享目录路径硬编码到我的机器,这是我正在编写的问题,以帮助您解决问题。
file.copy(from='/Users/ericpgreen/Box Sync/Project/Paper/draft.docx', to='subfolder/draft.docx', # my repo overwrite=TRUE) source(scripts/analysis.R) # generates objects we reference in the .docx file
添加
\begin{document}
,我包含一个块,我将.docx
文件转换为.txt
,然后将其重命名为.Rnw
。# convert docx to txt system("textutil -convert txt 'subfolder/draft.docx'") # rename txt to .Rnw file.rename('subfolder/draft.txt', 'subfolder/draft.Rnw')
下一个子块调用此
.Rnw
文件,该文件包含Word文件的文本,并引用通过\Sexpr{}
包含的R对象:<<include-draft, child='draft.Rnw', include=FALSE>>= @
这对我来说很好。 每当我编织
.Rnw
文件时,它会抓取我的同事编辑过的最新版本的.docx
文件(包括跟踪更改和注释),并在稍后未显示的步骤中将要解决的问题
这个设置几乎满足了我的所有需求,只是初始的
file.copy()
命令被硬编码到我的机器上。 因此,如果我的小组中有人克隆了我的回购(例如,使用版本控制的研究助理),它将无法开箱即用。 在这种情况下,是否有硬编码的解决方法?I am using RStudio to knit an
.Rnw
file to ..Rnw
file is stored in directory that is under git version control. This directory also contains a.RProj
file for the project.I collaborate with colleagues who don't know the first thing about
.Rnw
files and git. These colleagues want to open a Word file and track change their hearts out. So I give the people what they want.Everyone needs access, so storing the Word file on a cloud service like Box makes sense. In the past I created a subfolder in my repo that I shared—keeping everything within the root directory—but this time around I needed to store the file in a shared folder that someone else created. So my solution was to copy the Word file from this shared directory to my repository.
Technical Approach
I don't know how to make this a reproducible problem, but hopefully you will give me some latitude since I'm trying to make my work fully reproducible ;)
Let's say that my
.Rnw
file is stored inrepoRoot/subfolder
. Sinceknitr
changes the working directory tosubfolder
where this.Rnw
file is located, the first chunk sets theroot.dir
one level up at the project root.<<knitr, include=FALSE>>= library(knitr) opts_knit$set(root.dir=normalizePath('../')) # go up 1 level @
The next chunk copies the Word file from the shared folder to my git repo and runs the analysis file. The shared directory path is hard coded to my machine, which is the problem I'm writing for your help solving.
file.copy(from='/Users/ericpgreen/Box Sync/Project/Paper/draft.docx', to='subfolder/draft.docx', # my repo overwrite=TRUE) source(scripts/analysis.R) # generates objects we reference in the .docx file
After adding
\begin{document}
, I include a chunk where I convert the.docx
file to.txt
and then rename it to.Rnw
.# convert docx to txt system("textutil -convert txt 'subfolder/draft.docx'") # rename txt to .Rnw file.rename('subfolder/draft.txt', 'subfolder/draft.Rnw')
The next child chunk calls this
.Rnw
file that contains the text of the Word file with references to R objects included through\Sexpr{}
:<<include-draft, child='draft.Rnw', include=FALSE>>= @
This works just fine for me. Whenever I knit the
.Rnw
file it grabs the latest version of the.docx
file that my colleagues have edited (complete with track changes and comments) and, in a later step not shown here, returns theProblem to Solve
This setup meets almost every need for me, except that the initial
file.copy()
command is hard coded to my machine. So if someone in my group clones my repo (e.g., research assistants who DO use version control), it won't run out of the box. Is there a workaround to hard coding in this type of case?
原文:https://stackoverflow.com/questions/38649495
最满意答案
public class Worker{ String name; int number; private static int totalCount=0; public Worker(String N){ name=N; totalCount++; number = totalCount; } public String numberOfTime(){ return name +", "+ number; } }
尝试这个
您没有为实例分配编号,它们的总计数应与分配给每个实例的编号分开
public class Worker{ String name; int number; private static int totalCount=0; public Worker(String N){ name=N; totalCount++; number = totalCount; } public String numberOfTime(){ return name +", "+ number; } }
Try this
You are not assigning a number to the instances, Their total count should be separate from the number assigned to every instance
相关问答
更多-
TCP/IP模型是一个________。[2023-10-02]
a -
下列中不属于面向对象的编程语言的是?[2022-05-30]
a -
row_number()窗口函数正是医生所规定的: SELECT id, col_a, ROW_NUMBER() OVER (PARTITION BY col_a ORDER BY id) - 1 AS offset FROM mytable The row_number() window function is just what the doctor prescribed: SELECT id, col_a, ROW_NUMBER() OVER (PARTITION BY col_a ORDER ...
-
Android唯一序列号(Android Unique Serial Number)[2022-07-09]
考虑到我的应用程序针对Android 4.0(API 14)及以上版本,是android.os.Build.SERIAL号码为Android设备独特的每个设备? 根据Android Developers博客中的这篇有用的文章 ,如果android.os.Build.SERIAL可用, 应该是唯一的。 从文章: 无需电话的设备需要在此处报告唯一的设备ID; 一些手机也可以这样做。 这是否意味着序列号可能不可用? 正确,可能不可用。 请注意,他们说“不需要电话的设备需要...” ,所以只有没有“电话”(如无线上 ... -
这是一种在程序持续时间内创建增量数字的方法。 由于没有后备数据库,程序的每次运行都将重置。 它通过使用AtomicInteger来确保唯一性。 我使用了ConcurrentMap来利用线程安全性以及.putIfAbsent方法。 但是,它可以很容易地转换为使用标准Map 。 我也只使用了一个String ,但更好的方法是使用一个真正的域对象。 它足以处理OP的问题并用于说明目的。 // a Map for holding the sequencing private ConcurrentMap
如何为每个类的实例分配唯一的序列号?(How can I assign a unique sequential number to each instance of a class?)[2023-12-05]
public class Worker{ String name; int number; private static int totalCount=0; public Worker(String N){ name=N; totalCount++; number = totalCount; } public String numberOfTime(){ return name +", "+ number; } } 尝试这 ...这样做: A(A ~= 0) = 1:nnz(A) This will do it: A(A ~= 0) = 1:nnz(A)顺序NEWID()(Sequential NEWID())[2023-11-06]
ROWVERSION数据类型是一种可能性,尽管它不适合用作主键; 它也是自动设置的。 另一种选择是自己创建它。 有一个需要的宽度列的表格,并且有一些代码可以自动递增该值并将其返回。 通过适当的锁定或交易,您可以使用它来生成适合作为主键的值。 你也可以用SQL CLR函数做类似的事情。 也可以通过这种方式提高效率。 例如,您可以使用当前时间,但存储以静态方式返回的最后一个值。 然后,如果下一个值与最后一个值相同,则增加1。 The ROWVERSION data type is one possibility ...我会建议在模型中构建序列模型。 这会让您更灵活地稍后调整序列号格式,而不会在数据库中保留唯一的自动增量。 使用常规的自动增量整数主键,然后像这样创建序列号: class Product def serial_number "PLN-%.6d" % id end end 所以,如果你有一个id = 567的产品,你会得到一个如下的序列号: Product.find(567).serial_number => PLN-000567 I would recommend constructing ...TSQL序列号生成(TSQL Sequential Number Generation)[2023-12-22]
您可以使用 BEGIN TRAN SELECT @UserId = MAX(UserId) FROM YourTable WITH(UPDLOCK, HOLDLOCK, ROWLOCK) WHERE LocationId = @LocationId --TODO: Increment it or initialise it if no users yet. INSERT INTO YourTable (UserId, Name) VALUES (@UserId, @Name) COMMIT 一次只 ...相关文章
更多- Java 流(Stream)、文件(File)和IO
- Hadoop的I/O
- My W3C Custom Mapping File
- Becoming a data scientist
- POJ 3620 Avoid The Lakes【DFS水题练格式Avoid The Lakes Time Limit: 1000MS Memory Limit: 65536K Total Sub】
- Lua 文件 I/O 操作
- shell 脚本执行,出现错误bad interpreter: No such file or directory
- Hadoop HDFS Wrong FS: hdfs:/ expected file:///
- 无法启动Hbase hbase-default.xml file seems to be for and old version of HBase
- PHP 中dirname(_file_)
最新问答
更多- 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
- 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
- OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
- 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
- codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
- 在计算机拍照在哪里进入
- 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
- No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
- 单页应用程序:页面重新加载(Single Page Application: page reload)
- 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
- System.StackOverflow错误(System.StackOverflow error)
- KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
- 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
- android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
- TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
- 企业安全培训的各项内容
- 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
- C#类名中允许哪些字符?(What characters are allowed in C# class name?)
- NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
- 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
- 将多个行和可变行移动到列(moving multiple and variable rows to columns)
- 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
- 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
- Angular $资源不会改变方法(Angular $resource doesn't change method)
- 在Angular 5中不是一个函数(is not a function in Angular 5)
- 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
- 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
- 常见的python rpc和cli接口(Common python rpc and cli interface)
- Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
- 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)